C#实现的ACCESS数据库操作类完整实例

作者:roucheng 时间:2024-01-20 02:57:36 

本文实例讲述了C#实现的ACCESS数据库操作类。分享给大家供大家参考,具体如下:

这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所有记录的数量的时候有多一个参数,这个需要注意一下!


using System;
using System.Text;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
namespace HoverTree.Web.DBUtility
{  /// <summary>
 /// 数据访问抽象基础类(ACCESS)
 /// Copyright (C) 2006-2007 hovertree.net
 /// All rights reserved
 /// </summary>
 public abstract class DbHelperACE
 {
   //数据库连接字符串(web.config来配置)
   //public static string connectionString = ConfigurationManager.AppSettings["ConnectionString"];
   // public static string connectionString = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["AccessConnectionString"]);
   public static string connectionString = ConfigurationManager.AppSettings["AccessConnectionString"];
   public DbHelperACE()
   {
   }
   #region 公用方法
   public static int GetMaxID(string FieldName, string TableName)
   {
     string strsql = "select max(" + FieldName + ")+1 from " + TableName;
     object obj = DbHelperACE.GetSingle(strsql);
     if (obj == null)
     {
       return 1;
     }
     else
     {
       return int.Parse(obj.ToString());
     }
   }
   public static bool Exists(string strSql)
   {
     object obj = DbHelperACE.GetSingle(strSql);
     int cmdresult;
     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
     {
       cmdresult = 0;
     }
     else
     {
       cmdresult = int.Parse(obj.ToString());
     }
     if (cmdresult == 0)
     {
       return false;
     }
     else
     {
       return true;
     }
   }
   public static bool Exists(string strSql, params OleDbParameter[] cmdParms)
   {
     object obj = DbHelperACE.GetSingle(strSql, cmdParms);
     int cmdresult;
     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
     {
       cmdresult = 0;
     }
     else
     {
       cmdresult = int.Parse(obj.ToString());
     }
     if (cmdresult == 0)
     {
       return false;
     }
     else
     {
       return true;
     }
   }
   #endregion
   #region 执行简单SQL语句
   /// <summary>
   /// 执行SQL语句,返回影响的记录数
   /// </summary>
   /// <param name="SQLString">SQL语句</param>
   /// <returns>影响的记录数</returns>
   public static int ExecuteSql(string SQLString)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       using (OleDbCommand cmd = new OleDbCommand(SQLString, connection))
       {
         try
         {
           connection.Open();
           int rows = cmd.ExecuteNonQuery();
           return rows;
         }
         catch (System.Data.OleDb.OleDbException E)
         {
           connection.Close();
           throw new Exception(E.Message);
         }
       }
     }
   }
   /// <summary>
   /// 执行SQL语句,设置命令的执行等待时间
   /// </summary>
   /// <param name="SQLString"></param>
   /// <param name="Times"></param>
   /// <returns></returns>
   public static int ExecuteSqlByTime(string SQLString, int Times)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       using (OleDbCommand cmd = new OleDbCommand(SQLString, connection))
       {
         try
         {
           connection.Open();
           cmd.CommandTimeout = Times;
           int rows = cmd.ExecuteNonQuery();
           return rows;
         }
         catch (System.Data.OleDb.OleDbException E)
         {
           connection.Close();
           throw new Exception(E.Message);
         }
       }
     }
   }
   /// <summary>
   /// 执行多条SQL语句,实现数据库事务。
   /// </summary>
   /// <param name="SQLStringList">多条SQL语句</param>
   public static void ExecuteSqlTran(ArrayList SQLStringList)
   {
     using (OleDbConnection conn = new OleDbConnection(connectionString))
     {
       conn.Open();
       OleDbCommand cmd = new OleDbCommand();
       cmd.Connection = conn;
       OleDbTransaction tx = conn.BeginTransaction();
       cmd.Transaction = tx;
       try
       {
         for (int n = 0; n < SQLStringList.Count; n++)
         {
           string strsql = SQLStringList[n].ToString();
           if (strsql.Trim().Length > 1)
           {
             cmd.CommandText = strsql;
             cmd.ExecuteNonQuery();
           }
         }
         tx.Commit();
       }
       catch (System.Data.OleDb.OleDbException E)
       {
         tx.Rollback();
         throw new Exception(E.Message);
       }
     }
   }
   /// <summary>
   /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
   /// </summary>
   /// <param name="strSQL">SQL语句</param>
   /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
   /// <returns>影响的记录数</returns>
   public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       OleDbCommand cmd = new OleDbCommand(strSQL, connection);
       System.Data.OleDb.OleDbParameter myParameter = new System.Data.OleDb.OleDbParameter("@fs", SqlDbType.Image);
       myParameter.Value = fs;
       cmd.Parameters.Add(myParameter);
       try
       {
         connection.Open();
         int rows = cmd.ExecuteNonQuery();
         return rows;
       }
       catch (System.Data.OleDb.OleDbException E)
       {
         throw new Exception(E.Message);
       }
       finally
       {
         cmd.Dispose();
         connection.Close();
       }
     }
   }
   /// <summary>
   /// 执行一条计算查询结果语句,返回查询结果(object)。
   /// </summary>
   /// <param name="SQLString">计算查询结果语句</param>
   /// <returns>查询结果(object)</returns>
   public static object GetSingle(string SQLString)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       using (OleDbCommand cmd = new OleDbCommand(SQLString, connection))
       {
         try
         {
           connection.Open();
           object obj = cmd.ExecuteScalar();
           if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
           {
             return null;
           }
           else
           {
             return obj;
           }
         }
         catch (System.Data.OleDb.OleDbException e)
         {
           connection.Close();
           throw new Exception(e.Message);
         }
       }
     }
   }
   /// <summary>
   /// 执行查询语句,返回SqlDataReader(使用该方法切记要手工关闭SqlDataReader和连接)
   /// </summary>
   /// <param name="strSQL">查询语句</param>
   /// <returns>SqlDataReader</returns>
   public static OleDbDataReader ExecuteReader(string strSQL)
   {
     OleDbConnection connection = new OleDbConnection(connectionString);
     OleDbCommand cmd = new OleDbCommand(strSQL, connection);
     try
     {
       connection.Open();
       OleDbDataReader myReader = cmd.ExecuteReader();
       return myReader;
     }
     catch (System.Data.OleDb.OleDbException e)
     {
       throw new Exception(e.Message);
     }
     //finally //不能在此关闭,否则,返回的对象将无法使用
     //{
     // cmd.Dispose();
     // connection.Close();
     //}
   }
   /// <summary>
   /// 执行查询语句,返回DataSet
   /// </summary>
   /// <param name="SQLString">查询语句</param>
   /// <returns>DataSet</returns>
   public static DataSet Query(string SQLString)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       DataSet ds = new DataSet();
       try
       {
         connection.Open();
         OleDbDataAdapter command = new OleDbDataAdapter(SQLString, connection);
         command.Fill(ds, "ds");
       }
       catch (System.Data.OleDb.OleDbException ex)
       {
         throw new Exception(ex.Message);
       }
       return ds;
     }
   }
   /// <summary>
   /// 执行查询语句,返回DataSet,设置命令的执行等待时间
   /// </summary>
   /// <param name="SQLString"></param>
   /// <param name="Times"></param>
   /// <returns></returns>
   public static DataSet Query(string SQLString, int Times)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       DataSet ds = new DataSet();
       try
       {
         connection.Open();
         OleDbDataAdapter command = new OleDbDataAdapter(SQLString, connection);
         command.SelectCommand.CommandTimeout = Times;
         command.Fill(ds, "ds");
       }
       catch (System.Data.OleDb.OleDbException ex)
       {
         throw new Exception(ex.Message);
       }
       return ds;
     }
   }
   #endregion
   #region 执行带参数的SQL语句
   /// <summary>
   /// 执行SQL语句,返回影响的记录数
   /// </summary>
   /// <param name="SQLString">SQL语句</param>
   /// <returns>影响的记录数</returns>
   public static int ExecuteSql(string SQLString, params OleDbParameter[] cmdParms)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       using (OleDbCommand cmd = new OleDbCommand())
       {
         try
         {
           PrepareCommand(cmd, connection, null, SQLString, cmdParms);
           int rows = cmd.ExecuteNonQuery();
           cmd.Parameters.Clear();
           return rows;
         }
         catch (System.Data.OleDb.OleDbException E)
         {
           throw new Exception(E.Message);
         }
       }
     }
   }
   /// <summary>
   /// 执行多条SQL语句,实现数据库事务。
   /// </summary>
   /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的OleDbParameter[])</param>
   public static void ExecuteSqlTran(Hashtable SQLStringList)
   {
     using (OleDbConnection conn = new OleDbConnection(connectionString))
     {
       conn.Open();
       using (OleDbTransaction trans = conn.BeginTransaction())
       {
         OleDbCommand cmd = new OleDbCommand();
         try
         {
           //循环
           foreach (DictionaryEntry myDE in SQLStringList)
           {
             string cmdText = myDE.Key.ToString();
             OleDbParameter[] cmdParms = (OleDbParameter[])myDE.Value;
             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
             int val = cmd.ExecuteNonQuery();
             cmd.Parameters.Clear();
             trans.Commit();
           }
         }
         catch
         {
           trans.Rollback();
           throw;
         }
       }
     }
   }
   /// <summary>
   /// 执行一条计算查询结果语句,返回查询结果(object)。
   /// </summary>
   /// <param name="SQLString">计算查询结果语句</param>
   /// <returns>查询结果(object)</returns>
   public static object GetSingle(string SQLString, params OleDbParameter[] cmdParms)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       using (OleDbCommand cmd = new OleDbCommand())
       {
         try
         {
           PrepareCommand(cmd, connection, null, SQLString, cmdParms);
           object obj = cmd.ExecuteScalar();
           cmd.Parameters.Clear();
           if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
           {
             return null;
           }
           else
           {
             return obj;
           }
         }
         catch (System.Data.OleDb.OleDbException e)
         {
           throw new Exception(e.Message);
         }
       }
     }
   }  
   /// <summary>
   /// 执行查询语句,返回SqlDataReader (使用该方法切记要手工关闭SqlDataReader和连接)
   /// </summary>
   /// <param name="strSQL">查询语句</param>
   /// <returns>SqlDataReader</returns>
   public static OleDbDataReader ExecuteReader(string SQLString, params OleDbParameter[] cmdParms)
   {
     OleDbConnection connection = new OleDbConnection(connectionString);
     OleDbCommand cmd = new OleDbCommand();
     try
     {
       PrepareCommand(cmd, connection, null, SQLString, cmdParms);
       OleDbDataReader myReader = cmd.ExecuteReader();
       cmd.Parameters.Clear();
       return myReader;
     }
     catch (System.Data.OleDb.OleDbException e)
     {
       throw new Exception(e.Message);
     }
     //finally //不能在此关闭,否则,返回的对象将无法使用
     //{
     // cmd.Dispose();
     // connection.Close();
     //}
   }
   /// <summary>
   /// 执行查询语句,返回DataSet
   /// </summary>
   /// <param name="SQLString">查询语句</param>
   /// <returns>DataSet</returns>
   public static DataSet Query(string SQLString, params OleDbParameter[] cmdParms)
   {
     using (OleDbConnection connection = new OleDbConnection(connectionString))
     {
       OleDbCommand cmd = new OleDbCommand();
       PrepareCommand(cmd, connection, null, SQLString, cmdParms);
       using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
       {
         DataSet ds = new DataSet();
         try
         {
           da.Fill(ds, "ds");
           cmd.Parameters.Clear();
         }
         catch (System.Data.OleDb.OleDbException ex)
         {
           throw new Exception(ex.Message);
         }
         return ds;
       }
     }
   }
   private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] cmdParms)
   {
     if (conn.State != ConnectionState.Open)
       conn.Open();
     cmd.Connection = conn;
     cmd.CommandText = cmdText;
     if (trans != null)
       cmd.Transaction = trans;
     cmd.CommandType = CommandType.Text;//cmdType;
     if (cmdParms != null)
     {
       foreach (OleDbParameter parameter in cmdParms)
       {
         if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
           (parameter.Value == null))
         {
           parameter.Value = DBNull.Value;
         }
         cmd.Parameters.Add(parameter);
       }
     }
   }
   #endregion
   #region 获取根据指定字段排序并分页查询。

/// <summary>
   /// 分页查询数据记录总数获取
   /// </summary>
   /// <param name="_tbName">----要显示的表或多个表的连接</param>
   /// <param name="_ID">----主表的主键</param>
   /// <param name="_strCondition">----查询条件,不需where</param>
   /// <param name="_Dist">----是否添加查询字段的 DISTINCT 默认0不添加/1添加</param>
   /// <returns></returns>
   public static string getPageListCounts(string _ID, string _tbName, string _strCondition, int _Dist)
   {
     //---存放取得查询结果总数的查询语句
     //---对含有DISTINCT的查询进行SQL构造
     //---对含有DISTINCT的总数查询进行SQL构造
     string strTmp = "", SqlSelect = "", SqlCounts = "";
     if (_Dist == 0)
     {
       SqlSelect = "Select ";
       SqlCounts = "COUNT(*)";
     }
     else
     {
       SqlSelect = "Select DISTINCT ";
       SqlCounts = "COUNT(DISTINCT " + _ID + ")";
     }
     if (_strCondition == string.Empty)
     {
       strTmp = SqlSelect + " "+ SqlCounts + " FROM " + _tbName;
     }
     else
     {
       strTmp = SqlSelect + " "+ SqlCounts + " FROM " + " Where (1=1) " + _strCondition;
     }
     return strTmp;
   }
   /// <summary>
   /// 智能返回SQL语句
   /// </summary>
   /// <param name="primaryKey">主键(不能为空)</param>
   /// <param name="queryFields">提取字段(不能为空)</param>
   /// <param name="tableName">表(理论上允许多表)</param>
   /// <param name="condition">条件(可以空)</param>
   /// <param name="OrderBy">排序,格式:字段名+""+ASC(可以空)</param>
   /// <param name="pageSize">分页数(不能为空)</param>
   /// <param name="pageIndex">当前页,起始为:1(不能为空)</param>
   /// <returns></returns>
   public static string getPageListSql(string primaryKey, string queryFields, string tableName, string condition, string orderBy, int pageSize, int pageIndex)
   {
     string strTmp = ""; //---strTmp用于返回的SQL语句
     string SqlSelect = "", SqlPrimaryKeySelect = "", strOrderBy = "", strWhere = " where 1=1 ", strTop = "";
     //0:分页数量
     //1:提取字段
     //2:表
     //3:条件
     //4:主键不存在的记录
     //5:排序
     SqlSelect = " select top {0} {1} from {2} {3} {4} {5}";
     //0:主键
     //1:TOP数量,为分页数*(排序号-1)
     //2:表
     //3:条件
     //4:排序
     SqlPrimaryKeySelect = " and {0} not in (select {1} {0} from {2} {3} {4}) ";
     if (orderBy != "")
       strOrderBy = " order by " + orderBy;
     if (condition != "")
       strWhere += " and " + condition;
     int pageindexsize = (pageIndex - 1) * pageSize;
     if (pageindexsize > 0)
     {
       strTop = " top " + pageindexsize.ToString();
       SqlPrimaryKeySelect = String.Format(SqlPrimaryKeySelect, primaryKey, strTop, tableName, strWhere, strOrderBy);
       strTmp = String.Format(SqlSelect, pageSize.ToString(), queryFields, tableName, strWhere, SqlPrimaryKeySelect, strOrderBy);
     }
     else
     {
       strTmp = String.Format(SqlSelect, pageSize.ToString(), queryFields, tableName, strWhere, "", strOrderBy);
     }
     return strTmp;
   }
   /// <summary>
   /// 获取根据指定字段排序并分页查询。DataSet
   /// </summary>
   /// <param name="pageSize">每页要显示的记录的数目</param>
   /// <param name="pageIndex">要显示的页的索引</param>
   /// <param name="tableName">要查询的数据表</param>
   /// <param name="queryFields">要查询的字段,如果是全部字段请填写:*</param>
   /// <param name="primaryKey">主键字段,类似排序用到</param>
   /// <param name="orderBy">是否为升序排列:0为升序,1为降序</param>
   /// <param name="condition">查询的筛选条件</param>
   /// <returns>返回排序并分页查询的DataSet</returns>
   public static DataSet GetPagingList(string primaryKey, string queryFields, string tableName, string condition, string orderBy, int pageSize, int pageIndex)
   {
     string sql = getPageListSql(primaryKey, queryFields, tableName, condition, orderBy, pageSize, pageIndex);
     return Query(sql);
   }
   public static string GetPagingListSQL(string primaryKey, string queryFields, string tableName, string condition, string orderBy, int pageSize, int pageIndex)
   {
     string sql = getPageListSql(primaryKey, queryFields, tableName, condition, orderBy, pageSize, pageIndex);
     return sql;
   }
   public static int GetRecordCount(string _ID, string _tbName, string _strCondition, int _Dist)
   {
     string sql = getPageListCounts( _ID, _tbName, _strCondition, _Dist);
     object obj = DbHelperACE.GetSingle(sql);
     if (obj == null)
     {
       return 1;
     }
     else
     {
       return int.Parse(obj.ToString());
     }
   }
   #endregion
 }
}

希望本文所述对大家C#程序设计有所帮助。

标签:C#,ACCESS数据库,操作类
0
投稿

猜你喜欢

  • python+selenium实现京东自动登录及秒杀功能

    2021-02-08 13:31:41
  • js自定义trim函数实现删除两端空格功能

    2024-04-29 13:21:34
  • 异地远程访问本地SQL Server数据库

    2024-01-18 20:00:18
  • 解决tensorflow1.x版本加载saver.restore目录报错的问题

    2023-08-09 15:48:24
  • PHP组合模式Composite Pattern优点与实现过程

    2023-05-29 02:10:44
  • python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例

    2023-09-20 17:59:32
  • python实现一个点绕另一个点旋转后的坐标

    2023-04-24 19:29:24
  • JSP学生信息管理系统设计

    2023-07-13 03:37:30
  • js重写alert事件(避免alert弹框标题出现网址)

    2024-05-08 09:32:43
  • Python实现读取目录所有文件的文件名并保存到txt文件代码

    2023-08-28 19:27:51
  • SQL Server数据表字段自定义自增数据格式的方法

    2024-01-13 03:23:45
  • python对 MySQL 数据库进行增删改查的脚本

    2024-01-18 07:04:24
  • Django静态资源部署404问题解决方案

    2021-05-20 21:28:46
  • laravel 实现划分admin和home 模块分组

    2024-05-22 10:02:03
  • 解决Pycharm中恢复被exclude的项目问题(pycharm source root)

    2023-10-30 11:10:44
  • Go语言学习网络编程与Http教程示例

    2024-02-08 10:33:12
  • 详解Python如何查看一个函数的参数

    2023-05-13 19:24:19
  • javascript实现简单的二级联动

    2024-04-19 09:49:15
  • 基于OpenCV实现视频循环播放

    2023-07-13 09:10:33
  • JavaScript中利用构造器函数模拟类的方法

    2023-07-02 05:30:13
  • asp之家 网络编程 m.aspxhome.com