好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

DbHelper通用数据库访问帮助类

DbHelper通用数据库访问帮助类

之前我一直都是在博客园中查看各位高手的博文,确实学到了不少知识,不过比较少写博客,现在就把我自己在项目实施过程中使用到比较好的技术框架写出来,希望能让更多的人了解和学习。

     通常我们在开发使用数据库访问帮助类时,都单独的针对某一种数据进行编写相应的数据访问帮助类,如SQLHelper,OracleHelper,OleDbHelper等,其实这些都帮助类的实现都是继承并实现ADO.NET中的数据库访问基类的,如SQLCommand->DbCommand,SQLConnection->DbConnection等,在未优化数据访问层之前,通常的框架结构如下所示:

我们现在可以将SQLServer,Oracle等的数据访问模块进行优化,将其合并为一个通用的DbHelper数据访问类,优化后的访问框架如下:

这样在使用数据访问时就可以直接使用DbHeper帮助类,这跟使用哪种数据库无任何关系,也就是说在更换数据库时,不需要侯任何现有的数据访问逻辑代码,这对我们的系统维护起到了很大的作用,在更换数据库时,只需简单的配置一下所使用的数据库提供程序,如下所示:

数据库提供程序配置操作、

 1   <?  xml version="1.0" encoding="utf-8"   ?> 
  2   <!-- 
  3   // 文 件: DbHelper.config
   4   // 作 者: yangdeyong
   5   // 时 间: 2012年4月10日 10:22:23
   6   // 摘 要: 结合DbHelper帮助类,对各种数据库提供程序的配置文件,可支持Odbc、OleDb、OracleClient、SqlClient、SqlServerCe等多种数据库提供程序
   7   --> 
  8   <  configuration  > 
  9     <  appSettings  > 
 10       <!--  一般有如下一些配置名称 要先安装好相应的数据库提供程序
  11       System.Data.Odbc
  12       System.Data.OleDb
  13       System.Data.OracleClient
  14       System.Data.SqlClient
  15       System.Data.SqlServerCe.3.5
  16       iAnywhere.Data.SQLAnywhere
  17       --> 
 18       <!--  配置数据库提供程序名称 Key名称不要更改  --> 
 19       <  add   key  ="DbProviderName"   value  ="System.Data.SqlClient"  /> 
 20  
 21       <!--  配置数据库链接字段串值 Key名称不要更改  --> 
 22       <  add   key  ="DbConnectionString"   value  ="Data Source=localhost\SQLEXPRESS;Initial Catalog=ydyTest;Integrated Security=SSPI"  /> 
 23     </  appSettings  > 
 24   </  configuration  > 

  1   <?  xml version="1.0" encoding="utf-8"   ?> 
  2   <!-- 
  3   // 文 件: DbHelper.config
   4   // 作 者: yangdeyong
   5   // 时 间: 2012年4月10日 10:22:23
   6   // 摘 要: 结合DbHelper帮助类,对各种数据库提供程序的配置文件,可支持Odbc、OleDb、OracleClient、SqlClient、SqlServerCe等多种数据库提供程序
   7   --> 
  8   <  configuration  > 
  9     <  appSettings  > 
 10       <!--  一般有如下一些配置名称 要先安装好相应的数据库提供程序
  11       System.Data.Odbc
  12       System.Data.OleDb
  13       System.Data.OracleClient
  14       System.Data.SqlClient
  15       System.Data.SqlServerCe.3.5
  16       iAnywhere.Data.SQLAnywhere
  17       --> 
 18       <!--  配置数据库提供程序名称 Key名称不要更改  --> 
 19       <  add   key  ="DbProviderName"   value  ="System.Data.SqlClient"  /> 
 20  
 21       <!--  配置数据库链接字段串值 Key名称不要更改  --> 
 22       <  add   key  ="DbConnectionString"   value  ="Data Source=localhost\SQLEXPRESS;Initial Catalog=ydyTest;Integrated Security=SSPI"  /> 
 23     </  appSettings  > 
 24   </  configuration  > 

为了满足这一通用的数据访问操作,我编写了一个DbHelper.cs类库,欢迎大家下载使用,希望可以帮助大家在数据库访问操作上更加方便、快捷,

具体的通用数据库访问帮助类代码如下所示:

通用数据库访问帮助类DbHelper.cs

 1   //   文 件: DbHelper.cs
    2   //   作 者: yangdeyong
    3   //   时 间: 2012年4月10日 10:12:45
    4   //   摘 要: .NET通用数据库操作帮助类,可支持Odbc、OleDb、OracleClient、SqlClient、SqlServerCe等多种数据库提供程序操作 
   5  
   6   using   System;
    7   using   System.Collections.Generic;
    8   using   System.Data;
    9   using   System.Data.Common;
   10   using   System.Linq;
   11   using   System.Text;
   12  
  13   namespace   DbHelper
   14   {
   15       ///   <summary> 
  16       ///   说 明: .NET通用数据库操作帮助类,可支持Odbc、OleDb、OracleClient、SqlClient、SqlServerCe等多种数据库提供程序操作
   17       ///   作 者: yangdeyong
   18       ///   时 间: 2012-04-10 10:12:45 
   19       ///   </summary> 
  20       ///   <remarks> 
  21       ///   作 者: yangdeyong
   22       ///   时 间: 2012-04-10 10:12:45 
   23       ///   </remarks> 
  24       public   sealed   class   DbHelper
   25       {
   26           #region  字段属性
  27  
  28           #region  静态公有字段
  29           ///   <summary> 
  30           ///   获取当前数据库配置的提供程序名称值DbProviderName
   31           ///   </summary> 
  32           public   static   readonly   string  DbProviderName = System.Configuration.ConfigurationManager.AppSettings[ "  DbProviderName  "  ];
   33  
  34           ///   <summary> 
  35           ///   获取当前数据库配置的连接字符串值DbConnectionString
   36           ///   </summary> 
  37           public   static   readonly   string  DbConnectionString = System.Configuration.ConfigurationManager.AppSettings[ "  DbConnectionString  "  ];
   38           #endregion 
  39  
  40           #region  私有字段
  41           ///   <summary> 
  42           ///   当前默认配置的数据库提供程序DbProviderFactory
   43           ///   </summary> 
  44           private  DbProviderFactory _dbFactory =  null  ;
   45  
  46           ///   <summary> 
  47           ///   当前数据库链接DbConnection对象
   48           ///   </summary> 
  49           private  DbConnection _dbConnection =  null  ;
   50  
  51           ///   <summary> 
  52           ///   当前的数据库提供程序
   53           ///   </summary> 
  54           private   string  _dbProviderName =  null  ;
   55  
  56           ///   <summary> 
  57           ///   当前的数据库连接字符串
   58           ///   </summary> 
  59           private   string  _dbConnectionString =  null  ;
   60           #endregion 
  61  
  62           #endregion 
  63  
  64           #region  构造函数
  65           ///   <summary> 
  66           ///   根据配置的数据库提供程序和链接串进行初始化此对象实例
   67           ///   </summary> 
  68           public   DbHelper()
   69              :  this  (DbHelper.DbConnectionString, DbHelper.DbProviderName)
   70           {
   71           }
   72  
  73           ///   <summary> 
  74           ///   根据数据库链接串和数据库提供程序名称两个参数进行初始化此对象实例
   75           ///   </summary> 
  76           ///   <param name="connectionString">  数据库连接配置字符串  </param> 
  77           ///   <param name="providerName">  数据库提供程序的名称  </param> 
  78           public  DbHelper( string  connectionString,  string   providerName)
   79           {
   80               if  (! string  .IsNullOrEmpty(providerName))
   81               {
   82                   this ._dbFactory = DbHelper.CreateDbProviderFactory(providerName); //  创建默认配置的数据库提供程序 
  83               }
   84               else 
  85               {
   86                   throw   new  ArgumentNullException( "  providerName  " ,  "  数据库提供程序名称参数值不能为空,请在配置文件中配置该项值!  "  );
   87               }
   88  
  89               if  (! string  .IsNullOrEmpty(connectionString))
   90               {
   91                   this ._dbConnection = DbHelper.CreateDbConnection(connectionString, providerName); //  创建当前数据库链接对象 
  92               }
   93               else 
  94               {
   95                   throw   new  ArgumentNullException( "  connectionString  " ,  "  数据库链接串参数值不能为空,请在配置文件中配置该项值!  "  );
   96               }
   97  
  98               //  保存当前连接字符串和数据库提供程序名称 
  99               this ._dbConnectionString =  connectionString;
  100               this ._dbProviderName =  providerName;
  101           }
  102           #endregion 
 103  
 104           #region  方法函数
 105  
 106           #region  创建DbProviderFactory对象(静态方法)
 107           ///   <summary> 
 108           ///   根据配置的数据库提供程序的DbProviderName名称来创建一个数据库配置的提供程序DbProviderFactory对象
  109           ///   </summary> 
 110           public   static   DbProviderFactory CreateDbProviderFactory()
  111           {
  112              DbProviderFactory dbFactory =  DbHelper.CreateDbProviderFactory(DbHelper.DbProviderName);
  113  
 114               return   dbFactory;
  115           }
  116  
 117           ///   <summary> 
 118           ///   根据参数名称创建一个数据库提供程序DbProviderFactory对象
  119           ///   </summary> 
 120           ///   <param name="dbProviderName">  数据库提供程序的名称  </param> 
 121           public   static  DbProviderFactory CreateDbProviderFactory( string   dbProviderName)
  122           {
  123              DbProviderFactory dbFactory =  DbProviderFactories.GetFactory(dbProviderName);
  124  
 125               return   dbFactory;
  126           }
  127           #endregion 
 128  
 129           #region  创建DbConnection对象(静态方法)
 130           ///   <summary> 
 131           ///   根据配置的数据库提供程序和链接串来创建数据库链接.
  132           ///   </summary> 
 133           public   static   DbConnection CreateDbConnection()
  134           {
  135              DbConnection dbConn =  DbHelper.CreateDbConnection(DbHelper.DbConnectionString, DbHelper.DbProviderName);
  136  
 137               return   dbConn;
  138           }
  139  
 140           ///   <summary> 
 141           ///   根据数据库连接字符串参数来创建数据库链接.
  142           ///   </summary> 
 143           ///   <param name="connectionString">  数据库连接配置字符串  </param> 
 144           ///   <param name="dbProviderName">  数据库提供程序的名称  </param> 
 145           ///   <returns></returns> 
 146           public   static  DbConnection CreateDbConnection( string  connectionString,  string   dbProviderName)
  147           {
  148              DbProviderFactory dbFactory =  DbHelper.CreateDbProviderFactory(dbProviderName);
  149  
 150              DbConnection dbConn =  dbFactory.CreateConnection();
  151              dbConn.ConnectionString =  connectionString;
  152  
 153               return   dbConn;
  154           }
  155           #endregion 
 156  
 157           #region  获取DbCommand对象
 158           ///   <summary> 
 159           ///   根据存储过程名称来构建当前数据库链接的DbCommand对象
  160           ///   </summary> 
 161           ///   <param name="storedProcedure">  存储过程名称  </param> 
 162           public  DbCommand GetStoredProcedureCommond( string   storedProcedure)
  163           {
  164              DbCommand dbCmd =  this  ._dbConnection.CreateCommand();
  165  
 166              dbCmd.CommandText =  storedProcedure;
  167              dbCmd.CommandType =  CommandType.StoredProcedure;
  168  
 169               return   dbCmd;
  170           }
  171  
 172           ///   <summary> 
 173           ///   根据SQL语句来构建当前数据库链接的DbCommand对象
  174           ///   </summary> 
 175           ///   <param name="sqlQuery">  SQL查询语句  </param> 
 176           public  DbCommand GetSqlStringCommond( string   sqlQuery)
  177           {
  178              DbCommand dbCmd =  this  ._dbConnection.CreateCommand();
  179  
 180              dbCmd.CommandText =  sqlQuery;
  181              dbCmd.CommandType =  CommandType.Text;
  182  
 183               return   dbCmd;
  184           }
  185           #endregion 
 186  
 187           #region  添加DbCommand参数
 188           ///   <summary> 
 189           ///   把参数集合添加到DbCommand对象中
  190           ///   </summary> 
 191           ///   <param name="cmd">  数据库命令操作对象  </param> 
 192           ///   <param name="dbParameterCollection">  数据库操作集合  </param> 
 193           public   void   AddParameterCollection(DbCommand cmd, DbParameterCollection dbParameterCollection)
  194           {
  195               if  (cmd !=  null  )
  196               {
  197                   foreach  (DbParameter dbParameter  in   dbParameterCollection)
  198                   {
  199                       cmd.Parameters.Add(dbParameter);
  200                   }
  201               }
  202           }
  203  
 204           ///   <summary> 
 205           ///   把输出参数添加到DbCommand对象中
  206           ///   </summary> 
 207           ///   <param name="cmd">  数据库命令操作对象  </param> 
 208           ///   <param name="parameterName">  参数名称  </param> 
 209           ///   <param name="dbType">  参数的类型  </param> 
 210           ///   <param name="size">  参数的大小  </param> 
 211           public   void  AddOutParameter(DbCommand cmd,  string  parameterName, DbType dbType,  int   size)
  212           {
  213               if  (cmd !=  null  )
  214               {
  215                  DbParameter dbParameter =  cmd.CreateParameter();
  216  
 217                  dbParameter.DbType =  dbType;
  218                  dbParameter.ParameterName =  parameterName;
  219                  dbParameter.Size =  size;
  220                  dbParameter.Direction =  ParameterDirection.Output;
  221  
 222                   cmd.Parameters.Add(dbParameter);
  223               }
  224           }
  225  
 226           ///   <summary> 
 227           ///   把输入参数添加到DbCommand对象中
  228           ///   </summary> 
 229           ///   <param name="cmd">  数据库命令操作对象  </param> 
 230           ///   <param name="parameterName">  参数名称  </param> 
 231           ///   <param name="dbType">  参数的类型  </param> 
 232           ///   <param name="value">  参数值  </param> 
 233           public   void  AddInParameter(DbCommand cmd,  string  parameterName, DbType dbType,  object   value)
  234           {
  235               if  (cmd !=  null  )
  236               {
  237                  DbParameter dbParameter =  cmd.CreateParameter();
  238  
 239                  dbParameter.DbType =  dbType;
  240                  dbParameter.ParameterName =  parameterName;
  241                  dbParameter.Value =  value;
  242                  dbParameter.Direction =  ParameterDirection.Input;
  243  
 244                   cmd.Parameters.Add(dbParameter);
  245               }
  246           }
  247  
 248           ///   <summary> 
 249           ///   把返回参数添加到DbCommand对象中
  250           ///   </summary> 
 251           ///   <param name="cmd">  数据库命令操作对象  </param> 
 252           ///   <param name="parameterName">  参数名称  </param> 
 253           ///   <param name="dbType">  参数的类型  </param> 
 254           public   void  AddReturnParameter(DbCommand cmd,  string   parameterName, DbType dbType)
  255           {
  256               if  (cmd !=  null  )
  257               {
  258                  DbParameter dbParameter =  cmd.CreateParameter();
  259  
 260                  dbParameter.DbType =  dbType;
  261                  dbParameter.ParameterName =  parameterName;
  262                  dbParameter.Direction =  ParameterDirection.ReturnValue;
  263  
 264                   cmd.Parameters.Add(dbParameter);
  265               }
  266           }
  267  
 268           ///   <summary> 
 269           ///   根据参数名称从DbCommand对象中获取相应的参数对象
  270           ///   </summary> 
 271           ///   <param name="cmd">  数据库命令操作对象  </param> 
 272           ///   <param name="parameterName">  参数名称  </param> 
 273           public  DbParameter GetParameter(DbCommand cmd,  string   parameterName)
  274           {
  275               if  (cmd !=  null  && cmd.Parameters.Count >  0  )
  276               {
  277                  DbParameter param =  cmd.Parameters[parameterName];
  278  
 279                   return   param;
  280               }
  281  
 282               return   null  ;
  283           }
  284           #endregion 
 285  
 286           #region  执行SQL脚本语句
 287           ///   <summary> 
 288           ///   执行相应的SQL命令,返回一个DataSet数据集合
  289           ///   </summary> 
 290           ///   <param name="sqlQuery">  需要执行的SQL语句  </param> 
 291           ///   <returns>  返回一个DataSet数据集合  </returns> 
 292           public  DataSet ExecuteDataSet( string   sqlQuery)
  293           {
  294              DataSet ds =  new   DataSet();
  295  
 296               if  (! string  .IsNullOrEmpty(sqlQuery))
  297               {
  298                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  299  
 300                  ds =  ExecuteDataSet(cmd);
  301               }
  302  
 303               return   ds;
  304           }
  305  
 306           ///   <summary> 
 307           ///   执行相应的SQL命令,返回一个DataTable数据集
  308           ///   </summary> 
 309           ///   <param name="sqlQuery">  需要执行的SQL语句  </param> 
 310           ///   <returns>  返回一个DataTable数据集  </returns> 
 311           public  DataTable ExecuteDataTable( string   sqlQuery)
  312           {
  313              DataTable dt =  new   DataTable();
  314  
 315               if  (! string  .IsNullOrEmpty(sqlQuery))
  316               {
  317                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  318  
 319                  dt =  ExecuteDataTable(cmd);
  320               }
  321  
 322               return   dt;
  323           }
  324  
 325           ///   <summary> 
 326           ///   执行相应的SQL命令,返回一个DbDataReader数据对象,如果没有则返回null值
  327           ///   </summary> 
 328           ///   <param name="sqlQuery">  需要执行的SQL命令  </param> 
 329           ///   <returns>  返回一个DbDataReader数据对象,如果没有则返回null值  </returns> 
 330           public  DbDataReader ExecuteReader( string   sqlQuery)
  331           {
  332               if  (! string  .IsNullOrEmpty(sqlQuery))
  333               {
  334                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  335  
 336                  DbDataReader reader =  ExecuteReader(cmd);
  337  
 338                   return   reader;
  339               }
  340  
 341               return   null  ;
  342           }
  343  
 344           ///   <summary> 
 345           ///   执行相应的SQL命令,返回影响的数据记录数,如果不成功则返回-1
  346           ///   </summary> 
 347           ///   <param name="sqlQuery">  需要执行的SQL命令  </param> 
 348           ///   <returns>  返回影响的数据记录数,如果不成功则返回-1  </returns> 
 349           public   int  ExecuteNonQuery( string   sqlQuery)
  350           {
  351               if  (! string  .IsNullOrEmpty(sqlQuery))
  352               {
  353                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  354  
 355                   int  retVal =  ExecuteNonQuery(cmd);
  356  
 357                   return   retVal;
  358               }
  359  
 360               return  - 1  ;
  361           }
  362  
 363           ///   <summary> 
 364           ///   执行相应的SQL命令,返回结果集中的第一行第一列的值,如果不成功则返回null值
  365           ///   </summary> 
 366           ///   <param name="sqlQuery">  需要执行的SQL命令  </param> 
 367           ///   <returns>  返回结果集中的第一行第一列的值,如果不成功则返回null值  </returns> 
 368           public   object  ExecuteScalar( string   sqlQuery)
  369           {
  370               if  (! string  .IsNullOrEmpty(sqlQuery))
  371               {
  372                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  373  
 374                   object  retVal =  ExecuteScalar(cmd);
  375  
 376                   return   retVal;
  377               }
  378  
 379               return   null  ;
  380           }
  381  
 382           #endregion 
 383  
 384           #region  执行DbCommand命令
 385           ///   <summary> 
 386           ///   执行相应的命令,返回一个DataSet数据集合
  387           ///   </summary> 
 388           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 389           ///   <returns>  返回一个DataSet数据集合  </returns> 
 390           public   DataSet ExecuteDataSet(DbCommand cmd)
  391           {
  392              DataSet ds =  new   DataSet();
  393  
 394               if  (cmd !=  null  )
  395               {
  396                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  397                  dbDataAdapter.SelectCommand =  cmd;
  398  
 399                   dbDataAdapter.Fill(ds);
  400               }
  401  
 402               return   ds;
  403           }
  404  
 405           ///   <summary> 
 406           ///   执行相应的命令,返回一个DataTable数据集合
  407           ///   </summary> 
 408           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 409           ///   <returns>  返回一个DataTable数据集合  </returns> 
 410           public   DataTable ExecuteDataTable(DbCommand cmd)
  411           {
  412              DataTable dataTable =  new   DataTable();
  413  
 414               if  (cmd !=  null  )
  415               {
  416                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  417                  dbDataAdapter.SelectCommand =  cmd;
  418  
 419                   dbDataAdapter.Fill(dataTable);
  420               }
  421  
 422               return   dataTable;
  423           }
  424  
 425           ///   <summary> 
 426           ///   执行相应的命令,返回一个DbDataReader数据对象,如果没有则返回null值
  427           ///   </summary> 
 428           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 429           ///   <returns>  返回一个DbDataReader数据对象,如果没有则返回null值  </returns> 
 430           public   DbDataReader ExecuteReader(DbCommand cmd)
  431           {
  432               if  (cmd !=  null  && cmd.Connection !=  null  )
  433               {
  434                   if  (cmd.Connection.State !=  ConnectionState.Open)
  435                   {
  436                       cmd.Connection.Open();
  437                   }
  438  
 439                  DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); //  当reader读取结束时自动关闭数据库链接 
 440  
 441                   return   reader;
  442               }
  443  
 444               return   null  ;
  445           }
  446  
 447           ///   <summary> 
 448           ///   执行相应的命令,返回影响的数据记录数,如果不成功则返回-1
  449           ///   </summary> 
 450           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 451           ///   <returns>  返回影响的数据记录数,如果不成功则返回-1  </returns> 
 452           public   int   ExecuteNonQuery(DbCommand cmd)
  453           {
  454               if  (cmd !=  null  && cmd.Connection !=  null  )
  455               {
  456                   if  (cmd.Connection.State !=  ConnectionState.Open)
  457                   {
  458                       cmd.Connection.Open();
  459                   }
  460  
 461                   int  retVal =  cmd.ExecuteNonQuery();
  462  
 463                   cmd.Connection.Close();
  464  
 465                   return   retVal;
  466               }
  467  
 468               return  - 1  ;
  469           }
  470  
 471           ///   <summary> 
 472           ///   执行相应的命令,返回结果集中的第一行第一列的值,如果不成功则返回null值
  473           ///   </summary> 
 474           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 475           ///   <returns>  返回结果集中的第一行第一列的值,如果不成功则返回null值  </returns> 
 476           public   object   ExecuteScalar(DbCommand cmd)
  477           {
  478               if  (cmd !=  null  && cmd.Connection !=  null  )
  479               {
  480                   if  (cmd.Connection.State !=  ConnectionState.Open)
  481                   {
  482                       cmd.Connection.Open();
  483                   }
  484  
 485                   object  retVal =  cmd.ExecuteScalar();
  486  
 487                   cmd.Connection.Close();
  488  
 489                   return   retVal;
  490               }
  491  
 492               return   null  ;
  493           }
  494           #endregion 
 495  
 496           #region  执行DbTransaction事务
 497           ///   <summary> 
 498           ///   以事务的方式执行相应的命令,返回一个DataSet数据集合
  499           ///   </summary> 
 500           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 501           ///   <param name="trans">  数据库事务对象  </param> 
 502           ///   <returns>  返回一个DataSet数据集合  </returns> 
 503           public   DataSet ExecuteDataSet(DbCommand cmd, Trans trans)
  504           {
  505              DataSet ds =  new   DataSet();
  506  
 507               if  (cmd !=  null  )
  508               {
  509                  cmd.Connection =  trans.Connection;
  510                  cmd.Transaction =  trans.Transaction;
  511  
 512                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  513                  dbDataAdapter.SelectCommand =  cmd;
  514  
 515                   dbDataAdapter.Fill(ds);
  516               }
  517  
 518               return   ds;
  519           }
  520  
 521           ///   <summary> 
 522           ///   以事务的方式执行相应的命令,返回一个DataTable数据集合
  523           ///   </summary> 
 524           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 525           ///   <param name="trans">  数据库事务对象  </param> 
 526           ///   <returns>  返回一个DataTable数据集合  </returns> 
 527           public   DataTable ExecuteDataTable(DbCommand cmd, Trans trans)
  528           {
  529              DataTable dataTable =  new   DataTable();
  530  
 531               if  (cmd !=  null  )
  532               {
  533                  cmd.Connection =  trans.Connection;
  534                  cmd.Transaction =  trans.Transaction;
  535  
 536                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  537                  dbDataAdapter.SelectCommand =  cmd;
  538  
 539                   dbDataAdapter.Fill(dataTable);
  540               }
  541  
 542               return   dataTable;
  543           }
  544  
 545           ///   <summary> 
 546           ///   以事务的方式执行相应的命令,返回一个DbDataReader数据对象,如果没有则返回null值
  547           ///   </summary> 
 548           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 549           ///   <param name="trans">  数据库事务对象  </param> 
 550           ///   <returns>  返回一个DbDataReader数据对象,如果没有则返回null值  </returns> 
 551           public   DbDataReader ExecuteReader(DbCommand cmd, Trans trans)
  552           {
  553               if  (cmd !=  null  )
  554               {
  555                   cmd.Connection.Close();
  556  
 557                  cmd.Connection =  trans.Connection;
  558                  cmd.Transaction =  trans.Transaction;
  559  
 560                  DbDataReader reader =  cmd.ExecuteReader();
  561  
 562                   return   reader;
  563               }
  564  
 565               return   null  ;
  566           }
  567  
 568           ///   <summary> 
 569           ///   以事务的方式执行相应的命令,返回影响的数据记录数,如果不成功则返回-1
  570           ///   </summary> 
 571           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 572           ///   <param name="trans">  数据库事务对象  </param> 
 573           ///   <returns>  返回影响的数据记录数,如果不成功则返回-1  </returns> 
 574           public   int   ExecuteNonQuery(DbCommand cmd, Trans trans)
  575           {
  576               if  (cmd !=  null  )
  577               {
  578                   cmd.Connection.Close();
  579  
 580                  cmd.Connection =  trans.Connection;
  581                  cmd.Transaction =  trans.Transaction;
  582  
 583                   int  retVal =  cmd.ExecuteNonQuery();
  584  
 585                   return   retVal;
  586               }
  587  
 588               return  - 1  ;
  589           }
  590  
 591           ///   <summary> 
 592           ///   以事务的方式执行相应的命令,返回结果集中的第一行第一列的值,如果不成功则返回null值
  593           ///   </summary> 
 594           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 595           ///   <param name="trans">  数据库事务对象  </param> 
 596           ///   <returns>  返回结果集中的第一行第一列的值,如果不成功则返回null值  </returns> 
 597           public   object   ExecuteScalar(DbCommand cmd, Trans trans)
  598           {
  599               if  (cmd !=  null  )
  600               {
  601                   cmd.Connection.Close();
  602  
 603                  cmd.Connection =  trans.Connection;
  604                  cmd.Transaction =  trans.Transaction;
  605  
 606                   object  retVal =  cmd.ExecuteScalar();
  607  
 608                   return   retVal;
  609               }
  610  
 611               return   null  ;
  612           }
  613           #endregion 
 614  
 615           #endregion 
 616       }
  617  
 618       ///   <summary> 
 619       ///   说 明: 数据库事务操作对象
  620       ///   作 者: yangdeyong
  621       ///   时 间: 2012-04-10 10:19:23 
  622       ///   </summary> 
 623       ///   <remarks> 
 624       ///   作 者: yangdeyong
  625       ///   时 间: 2012-04-10 10:12:45 
  626       ///   </remarks> 
 627       public   sealed   class   Trans : IDisposable
  628       {
  629           #region  字段属性
 630           private  DbConnection connection =  null  ;
  631           ///   <summary> 
 632           ///   获取当前数据库链接对象
  633           ///   </summary> 
 634           public   DbConnection Connection
  635           {
  636               get 
 637               {
  638                   return   this  .connection;
  639               }
  640           }
  641  
 642           private  DbTransaction transaction =  null  ;
  643           ///   <summary> 
 644           ///   获取当前数据库事务对象
  645           ///   </summary> 
 646           public   DbTransaction Transaction
  647           {
  648               get 
 649               {
  650                   return   this  .transaction;
  651               }
  652           }
  653           #endregion 
 654  
 655           #region  构造函数
 656           ///   <summary> 
 657           ///   根据配置的数据库提供程序和连接字符串来创建此事务对象
  658           ///   </summary> 
 659           public   Trans()
  660              :  this  (DbHelper.DbConnectionString, DbHelper.DbProviderName)
  661           {
  662           }
  663  
 664           ///   <summary> 
 665           ///   根据数据库连接字符串来创建此事务对象
  666           ///   </summary> 
 667           ///   <param name="connectionString">  数据库连接字符串  </param> 
 668           ///   <param name="dbProviderName">  数据库提供程序的名称  </param> 
 669           public  Trans( string  connectionString,  string   dbProviderName)
  670           {
  671               if  (! string  .IsNullOrEmpty(connectionString))
  672               {
  673                   this .connection =  DbHelper.CreateDbConnection(connectionString, dbProviderName);
  674                   this  .Connection.Open();
  675  
 676                   this .transaction =  this  .Connection.BeginTransaction();
  677               }
  678               else 
 679               {
  680                   throw   new  ArgumentNullException( "  connectionString  " ,  "  数据库链接串参数值不能为空!  "  );
  681               }
  682           }
  683           #endregion 
 684  
 685           #region  方法函数
 686           ///   <summary> 
 687           ///   提交此数据库事务操作
  688           ///   </summary> 
 689           public   void   Commit()
  690           {
  691               this  .Transaction.Commit();
  692  
 693               this  .Close();
  694           }
  695  
 696           ///   <summary> 
 697           ///   回滚此数据库事务操作
  698           ///   </summary> 
 699           public   void   RollBack()
  700           {
  701               this  .Transaction.Rollback();
  702  
 703               this  .Close();
  704           }
  705  
 706           ///   <summary> 
 707           ///   关闭此数据库事务链接
  708           ///   </summary> 
 709           public   void   Close()
  710           {
  711               if  ( this .Connection.State !=  System.Data.ConnectionState.Closed)
  712               {
  713                   this  .Connection.Close();
  714               }
  715           }
  716           #endregion 
 717  
 718           #region  IDisposable 成员
 719           ///   <summary> 
 720           ///   执行与释放或重置非托管资源相关的应用程序定义的任务。
  721           ///   </summary> 
 722           public   void   Dispose()
  723           {
  724               this  .Close();
  725           }
  726           #endregion 
 727       }
  728  }

   1   //   文 件: DbHelper.cs
    2   //   作 者: yangdeyong
    3   //   时 间: 2012年4月10日 10:12:45
    4   //   摘 要: .NET通用数据库操作帮助类,可支持Odbc、OleDb、OracleClient、SqlClient、SqlServerCe等多种数据库提供程序操作 
   5  
   6   using   System;
    7   using   System.Collections.Generic;
    8   using   System.Data;
    9   using   System.Data.Common;
   10   using   System.Linq;
   11   using   System.Text;
   12  
  13   namespace   DbHelper
   14   {
   15       ///   <summary> 
  16       ///   说 明: .NET通用数据库操作帮助类,可支持Odbc、OleDb、OracleClient、SqlClient、SqlServerCe等多种数据库提供程序操作
   17       ///   作 者: yangdeyong
   18       ///   时 间: 2012-04-10 10:12:45 
   19       ///   </summary> 
  20       ///   <remarks> 
  21       ///   作 者: yangdeyong
   22       ///   时 间: 2012-04-10 10:12:45 
   23       ///   </remarks> 
  24       public   sealed   class   DbHelper
   25       {
   26           #region  字段属性
  27  
  28           #region  静态公有字段
  29           ///   <summary> 
  30           ///   获取当前数据库配置的提供程序名称值DbProviderName
   31           ///   </summary> 
  32           public   static   readonly   string  DbProviderName = System.Configuration.ConfigurationManager.AppSettings[ "  DbProviderName  "  ];
   33  
  34           ///   <summary> 
  35           ///   获取当前数据库配置的连接字符串值DbConnectionString
   36           ///   </summary> 
  37           public   static   readonly   string  DbConnectionString = System.Configuration.ConfigurationManager.AppSettings[ "  DbConnectionString  "  ];
   38           #endregion 
  39  
  40           #region  私有字段
  41           ///   <summary> 
  42           ///   当前默认配置的数据库提供程序DbProviderFactory
   43           ///   </summary> 
  44           private  DbProviderFactory _dbFactory =  null  ;
   45  
  46           ///   <summary> 
  47           ///   当前数据库链接DbConnection对象
   48           ///   </summary> 
  49           private  DbConnection _dbConnection =  null  ;
   50  
  51           ///   <summary> 
  52           ///   当前的数据库提供程序
   53           ///   </summary> 
  54           private   string  _dbProviderName =  null  ;
   55  
  56           ///   <summary> 
  57           ///   当前的数据库连接字符串
   58           ///   </summary> 
  59           private   string  _dbConnectionString =  null  ;
   60           #endregion 
  61  
  62           #endregion 
  63  
  64           #region  构造函数
  65           ///   <summary> 
  66           ///   根据配置的数据库提供程序和链接串进行初始化此对象实例
   67           ///   </summary> 
  68           public   DbHelper()
   69              :  this  (DbHelper.DbConnectionString, DbHelper.DbProviderName)
   70           {
   71           }
   72  
  73           ///   <summary> 
  74           ///   根据数据库链接串和数据库提供程序名称两个参数进行初始化此对象实例
   75           ///   </summary> 
  76           ///   <param name="connectionString">  数据库连接配置字符串  </param> 
  77           ///   <param name="providerName">  数据库提供程序的名称  </param> 
  78           public  DbHelper( string  connectionString,  string   providerName)
   79           {
   80               if  (! string  .IsNullOrEmpty(providerName))
   81               {
   82                   this ._dbFactory = DbHelper.CreateDbProviderFactory(providerName); //  创建默认配置的数据库提供程序 
  83               }
   84               else 
  85               {
   86                   throw   new  ArgumentNullException( "  providerName  " ,  "  数据库提供程序名称参数值不能为空,请在配置文件中配置该项值!  "  );
   87               }
   88  
  89               if  (! string  .IsNullOrEmpty(connectionString))
   90               {
   91                   this ._dbConnection = DbHelper.CreateDbConnection(connectionString, providerName); //  创建当前数据库链接对象 
  92               }
   93               else 
  94               {
   95                   throw   new  ArgumentNullException( "  connectionString  " ,  "  数据库链接串参数值不能为空,请在配置文件中配置该项值!  "  );
   96               }
   97  
  98               //  保存当前连接字符串和数据库提供程序名称 
  99               this ._dbConnectionString =  connectionString;
  100               this ._dbProviderName =  providerName;
  101           }
  102           #endregion 
 103  
 104           #region  方法函数
 105  
 106           #region  创建DbProviderFactory对象(静态方法)
 107           ///   <summary> 
 108           ///   根据配置的数据库提供程序的DbProviderName名称来创建一个数据库配置的提供程序DbProviderFactory对象
  109           ///   </summary> 
 110           public   static   DbProviderFactory CreateDbProviderFactory()
  111           {
  112              DbProviderFactory dbFactory =  DbHelper.CreateDbProviderFactory(DbHelper.DbProviderName);
  113  
 114               return   dbFactory;
  115           }
  116  
 117           ///   <summary> 
 118           ///   根据参数名称创建一个数据库提供程序DbProviderFactory对象
  119           ///   </summary> 
 120           ///   <param name="dbProviderName">  数据库提供程序的名称  </param> 
 121           public   static  DbProviderFactory CreateDbProviderFactory( string   dbProviderName)
  122           {
  123              DbProviderFactory dbFactory =  DbProviderFactories.GetFactory(dbProviderName);
  124  
 125               return   dbFactory;
  126           }
  127           #endregion 
 128  
 129           #region  创建DbConnection对象(静态方法)
 130           ///   <summary> 
 131           ///   根据配置的数据库提供程序和链接串来创建数据库链接.
  132           ///   </summary> 
 133           public   static   DbConnection CreateDbConnection()
  134           {
  135              DbConnection dbConn =  DbHelper.CreateDbConnection(DbHelper.DbConnectionString, DbHelper.DbProviderName);
  136  
 137               return   dbConn;
  138           }
  139  
 140           ///   <summary> 
 141           ///   根据数据库连接字符串参数来创建数据库链接.
  142           ///   </summary> 
 143           ///   <param name="connectionString">  数据库连接配置字符串  </param> 
 144           ///   <param name="dbProviderName">  数据库提供程序的名称  </param> 
 145           ///   <returns></returns> 
 146           public   static  DbConnection CreateDbConnection( string  connectionString,  string   dbProviderName)
  147           {
  148              DbProviderFactory dbFactory =  DbHelper.CreateDbProviderFactory(dbProviderName);
  149  
 150              DbConnection dbConn =  dbFactory.CreateConnection();
  151              dbConn.ConnectionString =  connectionString;
  152  
 153               return   dbConn;
  154           }
  155           #endregion 
 156  
 157           #region  获取DbCommand对象
 158           ///   <summary> 
 159           ///   根据存储过程名称来构建当前数据库链接的DbCommand对象
  160           ///   </summary> 
 161           ///   <param name="storedProcedure">  存储过程名称  </param> 
 162           public  DbCommand GetStoredProcedureCommond( string   storedProcedure)
  163           {
  164              DbCommand dbCmd =  this  ._dbConnection.CreateCommand();
  165  
 166              dbCmd.CommandText =  storedProcedure;
  167              dbCmd.CommandType =  CommandType.StoredProcedure;
  168  
 169               return   dbCmd;
  170           }
  171  
 172           ///   <summary> 
 173           ///   根据SQL语句来构建当前数据库链接的DbCommand对象
  174           ///   </summary> 
 175           ///   <param name="sqlQuery">  SQL查询语句  </param> 
 176           public  DbCommand GetSqlStringCommond( string   sqlQuery)
  177           {
  178              DbCommand dbCmd =  this  ._dbConnection.CreateCommand();
  179  
 180              dbCmd.CommandText =  sqlQuery;
  181              dbCmd.CommandType =  CommandType.Text;
  182  
 183               return   dbCmd;
  184           }
  185           #endregion 
 186  
 187           #region  添加DbCommand参数
 188           ///   <summary> 
 189           ///   把参数集合添加到DbCommand对象中
  190           ///   </summary> 
 191           ///   <param name="cmd">  数据库命令操作对象  </param> 
 192           ///   <param name="dbParameterCollection">  数据库操作集合  </param> 
 193           public   void   AddParameterCollection(DbCommand cmd, DbParameterCollection dbParameterCollection)
  194           {
  195               if  (cmd !=  null  )
  196               {
  197                   foreach  (DbParameter dbParameter  in   dbParameterCollection)
  198                   {
  199                       cmd.Parameters.Add(dbParameter);
  200                   }
  201               }
  202           }
  203  
 204           ///   <summary> 
 205           ///   把输出参数添加到DbCommand对象中
  206           ///   </summary> 
 207           ///   <param name="cmd">  数据库命令操作对象  </param> 
 208           ///   <param name="parameterName">  参数名称  </param> 
 209           ///   <param name="dbType">  参数的类型  </param> 
 210           ///   <param name="size">  参数的大小  </param> 
 211           public   void  AddOutParameter(DbCommand cmd,  string  parameterName, DbType dbType,  int   size)
  212           {
  213               if  (cmd !=  null  )
  214               {
  215                  DbParameter dbParameter =  cmd.CreateParameter();
  216  
 217                  dbParameter.DbType =  dbType;
  218                  dbParameter.ParameterName =  parameterName;
  219                  dbParameter.Size =  size;
  220                  dbParameter.Direction =  ParameterDirection.Output;
  221  
 222                   cmd.Parameters.Add(dbParameter);
  223               }
  224           }
  225  
 226           ///   <summary> 
 227           ///   把输入参数添加到DbCommand对象中
  228           ///   </summary> 
 229           ///   <param name="cmd">  数据库命令操作对象  </param> 
 230           ///   <param name="parameterName">  参数名称  </param> 
 231           ///   <param name="dbType">  参数的类型  </param> 
 232           ///   <param name="value">  参数值  </param> 
 233           public   void  AddInParameter(DbCommand cmd,  string  parameterName, DbType dbType,  object   value)
  234           {
  235               if  (cmd !=  null  )
  236               {
  237                  DbParameter dbParameter =  cmd.CreateParameter();
  238  
 239                  dbParameter.DbType =  dbType;
  240                  dbParameter.ParameterName =  parameterName;
  241                  dbParameter.Value =  value;
  242                  dbParameter.Direction =  ParameterDirection.Input;
  243  
 244                   cmd.Parameters.Add(dbParameter);
  245               }
  246           }
  247  
 248           ///   <summary> 
 249           ///   把返回参数添加到DbCommand对象中
  250           ///   </summary> 
 251           ///   <param name="cmd">  数据库命令操作对象  </param> 
 252           ///   <param name="parameterName">  参数名称  </param> 
 253           ///   <param name="dbType">  参数的类型  </param> 
 254           public   void  AddReturnParameter(DbCommand cmd,  string   parameterName, DbType dbType)
  255           {
  256               if  (cmd !=  null  )
  257               {
  258                  DbParameter dbParameter =  cmd.CreateParameter();
  259  
 260                  dbParameter.DbType =  dbType;
  261                  dbParameter.ParameterName =  parameterName;
  262                  dbParameter.Direction =  ParameterDirection.ReturnValue;
  263  
 264                   cmd.Parameters.Add(dbParameter);
  265               }
  266           }
  267  
 268           ///   <summary> 
 269           ///   根据参数名称从DbCommand对象中获取相应的参数对象
  270           ///   </summary> 
 271           ///   <param name="cmd">  数据库命令操作对象  </param> 
 272           ///   <param name="parameterName">  参数名称  </param> 
 273           public  DbParameter GetParameter(DbCommand cmd,  string   parameterName)
  274           {
  275               if  (cmd !=  null  && cmd.Parameters.Count >  0  )
  276               {
  277                  DbParameter param =  cmd.Parameters[parameterName];
  278  
 279                   return   param;
  280               }
  281  
 282               return   null  ;
  283           }
  284           #endregion 
 285  
 286           #region  执行SQL脚本语句
 287           ///   <summary> 
 288           ///   执行相应的SQL命令,返回一个DataSet数据集合
  289           ///   </summary> 
 290           ///   <param name="sqlQuery">  需要执行的SQL语句  </param> 
 291           ///   <returns>  返回一个DataSet数据集合  </returns> 
 292           public  DataSet ExecuteDataSet( string   sqlQuery)
  293           {
  294              DataSet ds =  new   DataSet();
  295  
 296               if  (! string  .IsNullOrEmpty(sqlQuery))
  297               {
  298                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  299  
 300                  ds =  ExecuteDataSet(cmd);
  301               }
  302  
 303               return   ds;
  304           }
  305  
 306           ///   <summary> 
 307           ///   执行相应的SQL命令,返回一个DataTable数据集
  308           ///   </summary> 
 309           ///   <param name="sqlQuery">  需要执行的SQL语句  </param> 
 310           ///   <returns>  返回一个DataTable数据集  </returns> 
 311           public  DataTable ExecuteDataTable( string   sqlQuery)
  312           {
  313              DataTable dt =  new   DataTable();
  314  
 315               if  (! string  .IsNullOrEmpty(sqlQuery))
  316               {
  317                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  318  
 319                  dt =  ExecuteDataTable(cmd);
  320               }
  321  
 322               return   dt;
  323           }
  324  
 325           ///   <summary> 
 326           ///   执行相应的SQL命令,返回一个DbDataReader数据对象,如果没有则返回null值
  327           ///   </summary> 
 328           ///   <param name="sqlQuery">  需要执行的SQL命令  </param> 
 329           ///   <returns>  返回一个DbDataReader数据对象,如果没有则返回null值  </returns> 
 330           public  DbDataReader ExecuteReader( string   sqlQuery)
  331           {
  332               if  (! string  .IsNullOrEmpty(sqlQuery))
  333               {
  334                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  335  
 336                  DbDataReader reader =  ExecuteReader(cmd);
  337  
 338                   return   reader;
  339               }
  340  
 341               return   null  ;
  342           }
  343  
 344           ///   <summary> 
 345           ///   执行相应的SQL命令,返回影响的数据记录数,如果不成功则返回-1
  346           ///   </summary> 
 347           ///   <param name="sqlQuery">  需要执行的SQL命令  </param> 
 348           ///   <returns>  返回影响的数据记录数,如果不成功则返回-1  </returns> 
 349           public   int  ExecuteNonQuery( string   sqlQuery)
  350           {
  351               if  (! string  .IsNullOrEmpty(sqlQuery))
  352               {
  353                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  354  
 355                   int  retVal =  ExecuteNonQuery(cmd);
  356  
 357                   return   retVal;
  358               }
  359  
 360               return  - 1  ;
  361           }
  362  
 363           ///   <summary> 
 364           ///   执行相应的SQL命令,返回结果集中的第一行第一列的值,如果不成功则返回null值
  365           ///   </summary> 
 366           ///   <param name="sqlQuery">  需要执行的SQL命令  </param> 
 367           ///   <returns>  返回结果集中的第一行第一列的值,如果不成功则返回null值  </returns> 
 368           public   object  ExecuteScalar( string   sqlQuery)
  369           {
  370               if  (! string  .IsNullOrEmpty(sqlQuery))
  371               {
  372                  DbCommand cmd =  GetSqlStringCommond(sqlQuery);
  373  
 374                   object  retVal =  ExecuteScalar(cmd);
  375  
 376                   return   retVal;
  377               }
  378  
 379               return   null  ;
  380           }
  381  
 382           #endregion 
 383  
 384           #region  执行DbCommand命令
 385           ///   <summary> 
 386           ///   执行相应的命令,返回一个DataSet数据集合
  387           ///   </summary> 
 388           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 389           ///   <returns>  返回一个DataSet数据集合  </returns> 
 390           public   DataSet ExecuteDataSet(DbCommand cmd)
  391           {
  392              DataSet ds =  new   DataSet();
  393  
 394               if  (cmd !=  null  )
  395               {
  396                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  397                  dbDataAdapter.SelectCommand =  cmd;
  398  
 399                   dbDataAdapter.Fill(ds);
  400               }
  401  
 402               return   ds;
  403           }
  404  
 405           ///   <summary> 
 406           ///   执行相应的命令,返回一个DataTable数据集合
  407           ///   </summary> 
 408           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 409           ///   <returns>  返回一个DataTable数据集合  </returns> 
 410           public   DataTable ExecuteDataTable(DbCommand cmd)
  411           {
  412              DataTable dataTable =  new   DataTable();
  413  
 414               if  (cmd !=  null  )
  415               {
  416                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  417                  dbDataAdapter.SelectCommand =  cmd;
  418  
 419                   dbDataAdapter.Fill(dataTable);
  420               }
  421  
 422               return   dataTable;
  423           }
  424  
 425           ///   <summary> 
 426           ///   执行相应的命令,返回一个DbDataReader数据对象,如果没有则返回null值
  427           ///   </summary> 
 428           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 429           ///   <returns>  返回一个DbDataReader数据对象,如果没有则返回null值  </returns> 
 430           public   DbDataReader ExecuteReader(DbCommand cmd)
  431           {
  432               if  (cmd !=  null  && cmd.Connection !=  null  )
  433               {
  434                   if  (cmd.Connection.State !=  ConnectionState.Open)
  435                   {
  436                       cmd.Connection.Open();
  437                   }
  438  
 439                  DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); //  当reader读取结束时自动关闭数据库链接 
 440  
 441                   return   reader;
  442               }
  443  
 444               return   null  ;
  445           }
  446  
 447           ///   <summary> 
 448           ///   执行相应的命令,返回影响的数据记录数,如果不成功则返回-1
  449           ///   </summary> 
 450           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 451           ///   <returns>  返回影响的数据记录数,如果不成功则返回-1  </returns> 
 452           public   int   ExecuteNonQuery(DbCommand cmd)
  453           {
  454               if  (cmd !=  null  && cmd.Connection !=  null  )
  455               {
  456                   if  (cmd.Connection.State !=  ConnectionState.Open)
  457                   {
  458                       cmd.Connection.Open();
  459                   }
  460  
 461                   int  retVal =  cmd.ExecuteNonQuery();
  462  
 463                   cmd.Connection.Close();
  464  
 465                   return   retVal;
  466               }
  467  
 468               return  - 1  ;
  469           }
  470  
 471           ///   <summary> 
 472           ///   执行相应的命令,返回结果集中的第一行第一列的值,如果不成功则返回null值
  473           ///   </summary> 
 474           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 475           ///   <returns>  返回结果集中的第一行第一列的值,如果不成功则返回null值  </returns> 
 476           public   object   ExecuteScalar(DbCommand cmd)
  477           {
  478               if  (cmd !=  null  && cmd.Connection !=  null  )
  479               {
  480                   if  (cmd.Connection.State !=  ConnectionState.Open)
  481                   {
  482                       cmd.Connection.Open();
  483                   }
  484  
 485                   object  retVal =  cmd.ExecuteScalar();
  486  
 487                   cmd.Connection.Close();
  488  
 489                   return   retVal;
  490               }
  491  
 492               return   null  ;
  493           }
  494           #endregion 
 495  
 496           #region  执行DbTransaction事务
 497           ///   <summary> 
 498           ///   以事务的方式执行相应的命令,返回一个DataSet数据集合
  499           ///   </summary> 
 500           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 501           ///   <param name="trans">  数据库事务对象  </param> 
 502           ///   <returns>  返回一个DataSet数据集合  </returns> 
 503           public   DataSet ExecuteDataSet(DbCommand cmd, Trans trans)
  504           {
  505              DataSet ds =  new   DataSet();
  506  
 507               if  (cmd !=  null  )
  508               {
  509                  cmd.Connection =  trans.Connection;
  510                  cmd.Transaction =  trans.Transaction;
  511  
 512                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  513                  dbDataAdapter.SelectCommand =  cmd;
  514  
 515                   dbDataAdapter.Fill(ds);
  516               }
  517  
 518               return   ds;
  519           }
  520  
 521           ///   <summary> 
 522           ///   以事务的方式执行相应的命令,返回一个DataTable数据集合
  523           ///   </summary> 
 524           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 525           ///   <param name="trans">  数据库事务对象  </param> 
 526           ///   <returns>  返回一个DataTable数据集合  </returns> 
 527           public   DataTable ExecuteDataTable(DbCommand cmd, Trans trans)
  528           {
  529              DataTable dataTable =  new   DataTable();
  530  
 531               if  (cmd !=  null  )
  532               {
  533                  cmd.Connection =  trans.Connection;
  534                  cmd.Transaction =  trans.Transaction;
  535  
 536                  DbDataAdapter dbDataAdapter =  this  ._dbFactory.CreateDataAdapter();
  537                  dbDataAdapter.SelectCommand =  cmd;
  538  
 539                   dbDataAdapter.Fill(dataTable);
  540               }
  541  
 542               return   dataTable;
  543           }
  544  
 545           ///   <summary> 
 546           ///   以事务的方式执行相应的命令,返回一个DbDataReader数据对象,如果没有则返回null值
  547           ///   </summary> 
 548           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 549           ///   <param name="trans">  数据库事务对象  </param> 
 550           ///   <returns>  返回一个DbDataReader数据对象,如果没有则返回null值  </returns> 
 551           public   DbDataReader ExecuteReader(DbCommand cmd, Trans trans)
  552           {
  553               if  (cmd !=  null  )
  554               {
  555                   cmd.Connection.Close();
  556  
 557                  cmd.Connection =  trans.Connection;
  558                  cmd.Transaction =  trans.Transaction;
  559  
 560                  DbDataReader reader =  cmd.ExecuteReader();
  561  
 562                   return   reader;
  563               }
  564  
 565               return   null  ;
  566           }
  567  
 568           ///   <summary> 
 569           ///   以事务的方式执行相应的命令,返回影响的数据记录数,如果不成功则返回-1
  570           ///   </summary> 
 571           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 572           ///   <param name="trans">  数据库事务对象  </param> 
 573           ///   <returns>  返回影响的数据记录数,如果不成功则返回-1  </returns> 
 574           public   int   ExecuteNonQuery(DbCommand cmd, Trans trans)
  575           {
  576               if  (cmd !=  null  )
  577               {
  578                   cmd.Connection.Close();
  579  
 580                  cmd.Connection =  trans.Connection;
  581                  cmd.Transaction =  trans.Transaction;
  582  
 583                   int  retVal =  cmd.ExecuteNonQuery();
  584  
 585                   return   retVal;
  586               }
  587  
 588               return  - 1  ;
  589           }
  590  
 591           ///   <summary> 
 592           ///   以事务的方式执行相应的命令,返回结果集中的第一行第一列的值,如果不成功则返回null值
  593           ///   </summary> 
 594           ///   <param name="cmd">  需要执行的DbCommand命令对象  </param> 
 595           ///   <param name="trans">  数据库事务对象  </param> 
 596           ///   <returns>  返回结果集中的第一行第一列的值,如果不成功则返回null值  </returns> 
 597           public   object   ExecuteScalar(DbCommand cmd, Trans trans)
  598           {
  599               if  (cmd !=  null  )
  600               {
  601                   cmd.Connection.Close();
  602  
 603                  cmd.Connection =  trans.Connection;
  604                  cmd.Transaction =  trans.Transaction;
  605  
 606                   object  retVal =  cmd.ExecuteScalar();
  607  
 608                   return   retVal;
  609               }
  610  
 611               return   null  ;
  612           }
  613           #endregion 
 614  
 615           #endregion 
 616       }
  617  
 618       ///   <summary> 
 619       ///   说 明: 数据库事务操作对象
  620       ///   作 者: yangdeyong
  621       ///   时 间: 2012-04-10 10:19:23 
  622       ///   </summary> 
 623       ///   <remarks> 
 624       ///   作 者: yangdeyong
  625       ///   时 间: 2012-04-10 10:12:45 
  626       ///   </remarks> 
 627       public   sealed   class   Trans : IDisposable
  628       {
  629           #region  字段属性
 630           private  DbConnection connection =  null  ;
  631           ///   <summary> 
 632           ///   获取当前数据库链接对象
  633           ///   </summary> 
 634           public   DbConnection Connection
  635           {
  636               get 
 637               {
  638                   return   this  .connection;
  639               }
  640           }
  641  
 642           private  DbTransaction transaction =  null  ;
  643           ///   <summary> 
 644           ///   获取当前数据库事务对象
  645           ///   </summary> 
 646           public   DbTransaction Transaction
  647           {
  648               get 
 649               {
  650                   return   this  .transaction;
  651               }
  652           }
  653           #endregion 
 654  
 655           #region  构造函数
 656           ///   <summary> 
 657           ///   根据配置的数据库提供程序和连接字符串来创建此事务对象
  658           ///   </summary> 
 659           public   Trans()
  660              :  this  (DbHelper.DbConnectionString, DbHelper.DbProviderName)
  661           {
  662           }
  663  
 664           ///   <summary> 
 665           ///   根据数据库连接字符串来创建此事务对象
  666           ///   </summary> 
 667           ///   <param name="connectionString">  数据库连接字符串  </param> 
 668           ///   <param name="dbProviderName">  数据库提供程序的名称  </param> 
 669           public  Trans( string  connectionString,  string   dbProviderName)
  670           {
  671               if  (! string  .IsNullOrEmpty(connectionString))
  672               {
  673                   this .connection =  DbHelper.CreateDbConnection(connectionString, dbProviderName);
  674                   this  .Connection.Open();
  675  
 676                   this .transaction =  this  .Connection.BeginTransaction();
  677               }
  678               else 
 679               {
  680                   throw   new  ArgumentNullException( "  connectionString  " ,  "  数据库链接串参数值不能为空!  "  );
  681               }
  682           }
  683           #endregion 
 684  
 685           #region  方法函数
 686           ///   <summary> 
 687           ///   提交此数据库事务操作
  688           ///   </summary> 
 689           public   void   Commit()
  690           {
  691               this  .Transaction.Commit();
  692  
 693               this  .Close();
  694           }
  695  
 696           ///   <summary> 
 697           ///   回滚此数据库事务操作
  698           ///   </summary> 
 699           public   void   RollBack()
  700           {
  701               this  .Transaction.Rollback();
  702  
 703               this  .Close();
  704           }
  705  
 706           ///   <summary> 
 707           ///   关闭此数据库事务链接
  708           ///   </summary> 
 709           public   void   Close()
  710           {
  711               if  ( this .Connection.State !=  System.Data.ConnectionState.Closed)
  712               {
  713                   this  .Connection.Close();
  714               }
  715           }
  716           #endregion 
 717  
 718           #region  IDisposable 成员
 719           ///   <summary> 
 720           ///   执行与释放或重置非托管资源相关的应用程序定义的任务。
  721           ///   </summary> 
 722           public   void   Dispose()
  723           {
  724               this  .Close();
  725           }
  726           #endregion 
 727       }
  728  }

在这些代码中,可以满足大多数的数据访问操作,如果需要自己还可以再继续扩展的,也欢迎大家指出其中存在的不足之处,谢谢。 

欢迎大家进行转载,谢谢大家的光临!

 

分类:  数据库

标签:  数据库 ,  SQL Server ,  DbHelper ,  Oracle ,  通用数据库访问帮助类 ,  数据访问

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于DbHelper通用数据库访问帮助类的详细内容...

  阅读:39次