【亚洲必赢官网】3个DbHelper数据操作类,数据库小工具整合版

本文章为原创内容,如需转发,请注明小编及出处,多谢!

自身在200伍年七月八日写的1篇小说“数据库小工具(C#)”中提到:

 

      其实,微软的公司库中有3个丰盛不易的数码操作类了.不过,不少店铺(起码我碰着的多少个…),对有个别”封装”了些什么的事物不太敢用,即使本人引入过微软的集团库框架了…然而仍然要”评估”…一评就是多少个月…而且,壹些供销合作社部分根本正是裸ado.net开发,可能本人包裹的数据库操作类万分别扭,很不好用.
      那里本人给我们共享2个自家参考集团库中的数据操作组件编码风格写的数据库操作类,对选择它的程序员来说,编码是很舒服滴(起码笔者觉着很好撒).以下是代码,很简短的,未有做此外多余的卷入,只是改变了ADO.NET的编码步骤,方便了切实支出数据库操作代码的程序员.


在编写有关数据库方面包车型地铁C#次第时,平日必要领会数据库的表中各字段的以下新闻:
一.
用于OracleParameter(或SqlParameter,…)中的字段和属性的数据库特定的数据类型。

实在,微软的公司库中有1个不行不易的数码操作类了.但是,不少集团(起码笔者蒙受的多少个…),对部分”封装”了些什么的东西不太敢用,即使自己推荐过微软的集团库框架了…不过如故要”评估”…1评正是几个月…而且,1些商户部分根本正是裸ado.net开发,大概自身包裹的数据库操作类非凡别扭,很倒霉用.
     
那里笔者给大家共享多个自家参考集团库中的数据操作组件编码风格写的数据库操作类,对选取它的程序员来说,编码是很舒服滴(起码笔者觉得很好撒).以下是代码,很简单的,未有做别的多余的包装,只是改变了ADO.NET的编码步骤,方便了切实费用数据库操作代码的程序员.

亚洲必赢官网 1    using System;
亚洲必赢官网 2    using System.Data;
亚洲必赢官网 3    using System.Data.Common;
亚洲必赢官网 4    using System.Configuration;
亚洲必赢官网 5
亚洲必赢官网 6    public class DbHelper
亚洲必赢官网 7亚洲必赢官网 8    亚洲必赢官网 9{
亚洲必赢官网 10        private static string dbProviderName = ConfigurationManager.AppSettings[“DbHelperProvider”];
亚洲必赢官网 11        private static string dbConnectionString = ConfigurationManager.AppSettings[“DbHelperConnectionString”];
亚洲必赢官网 12
亚洲必赢官网 13        private DbConnection connection;
亚洲必赢官网 14        public DbHelper()
亚洲必赢官网 15亚洲必赢官网 16        亚洲必赢官网 17{
亚洲必赢官网 18            this.connection = CreateConnection(DbHelper.dbConnectionString);
亚洲必赢官网 19        }
亚洲必赢官网 20        public DbHelper(string connectionString)
亚洲必赢官网 21亚洲必赢官网 22        亚洲必赢官网 23{
亚洲必赢官网 24            this.connection = CreateConnection(connectionString);
亚洲必赢官网 25        }
亚洲必赢官网 26        public static DbConnection CreateConnection()
亚洲必赢官网 27亚洲必赢官网 28        亚洲必赢官网 29{
亚洲必赢官网 30            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 31            DbConnection dbconn = dbfactory.CreateConnection();
亚洲必赢官网 32            dbconn.ConnectionString = DbHelper.dbConnectionString;
亚洲必赢官网 33            return dbconn;
亚洲必赢官网 34        }
亚洲必赢官网 35        public static DbConnection CreateConnection(string connectionString)
亚洲必赢官网 36亚洲必赢官网 37        亚洲必赢官网 38{
亚洲必赢官网 39            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 40            DbConnection dbconn = dbfactory.CreateConnection();
亚洲必赢官网 41            dbconn.ConnectionString = connectionString;
亚洲必赢官网 42            return dbconn;
亚洲必赢官网 43        }
亚洲必赢官网 44
亚洲必赢官网 45        public DbCommand GetStoredProcCommond(string storedProcedure)
亚洲必赢官网 46亚洲必赢官网 47        亚洲必赢官网 48{
亚洲必赢官网 49            DbCommand dbCommand = connection.CreateCommand();
亚洲必赢官网 50            dbCommand.CommandText = storedProcedure;
亚洲必赢官网 51            dbCommand.CommandType = CommandType.StoredProcedure;
亚洲必赢官网 52            return dbCommand;
亚洲必赢官网 53        }
亚洲必赢官网 54        public DbCommand GetSqlStringCommond(string sqlQuery)
亚洲必赢官网 55亚洲必赢官网 56        亚洲必赢官网 57{
亚洲必赢官网 58            DbCommand dbCommand = connection.CreateCommand();
亚洲必赢官网 59            dbCommand.CommandText = sqlQuery;
亚洲必赢官网 60            dbCommand.CommandType = CommandType.Text;
亚洲必赢官网 61            return dbCommand;
亚洲必赢官网 62        }
亚洲必赢官网 63
亚洲必赢官网 64亚洲必赢官网 65        增添参数#region 扩大参数
亚洲必赢官网 66        public void AddParameterCollection(DbCommand cmd, DbParameterCollection dbParameterCollection)
亚洲必赢官网 67亚洲必赢官网 68        亚洲必赢官网 69{
亚洲必赢官网 70            foreach (DbParameter dbParameter in dbParameterCollection)
亚洲必赢官网 71亚洲必赢官网 72            亚洲必赢官网 73{
亚洲必赢官网 74                cmd.Parameters.Add(dbParameter);
亚洲必赢官网 75            }
亚洲必赢官网 76        }
亚洲必赢官网 77        public void AddOutParameter(DbCommand cmd, string parameterName, DbType dbType, int size)
亚洲必赢官网 78亚洲必赢官网 79        亚洲必赢官网 80{
亚洲必赢官网 81            DbParameter dbParameter = cmd.CreateParameter();
亚洲必赢官网 82            dbParameter.DbType = dbType;
亚洲必赢官网 83            dbParameter.ParameterName = parameterName;
亚洲必赢官网 84            dbParameter.Size = size;
亚洲必赢官网 85            dbParameter.Direction = ParameterDirection.Output;
亚洲必赢官网 86            cmd.Parameters.Add(dbParameter);
亚洲必赢官网 87        }
亚洲必赢官网 88        public void AddInParameter(DbCommand cmd, string parameterName, DbType dbType, object value)
亚洲必赢官网 89亚洲必赢官网 90        亚洲必赢官网 91{
亚洲必赢官网 92            DbParameter dbParameter = cmd.CreateParameter();
亚洲必赢官网 93            dbParameter.DbType = dbType;
亚洲必赢官网 94            dbParameter.ParameterName = parameterName;
亚洲必赢官网 95            dbParameter.Value = value;
亚洲必赢官网 96            dbParameter.Direction = ParameterDirection.Input;
亚洲必赢官网 97            cmd.Parameters.Add(dbParameter);
亚洲必赢官网 98        }
亚洲必赢官网 99        public void AddReturnParameter(DbCommand cmd, string parameterName, DbType dbType)
亚洲必赢官网 100亚洲必赢官网 101        亚洲必赢官网 102{
亚洲必赢官网 103            DbParameter dbParameter = cmd.CreateParameter();
亚洲必赢官网 104【亚洲必赢官网】3个DbHelper数据操作类,数据库小工具整合版。            dbParameter.DbType = dbType;
亚洲必赢官网 105            dbParameter.ParameterName = parameterName;
亚洲必赢官网 106            dbParameter.Direction = ParameterDirection.ReturnValue;
亚洲必赢官网 107            cmd.Parameters.Add(dbParameter);
亚洲必赢官网 108        }
亚洲必赢官网 109        public DbParameter GetParameter(DbCommand cmd, string parameterName)
亚洲必赢官网 110亚洲必赢官网 111        亚洲必赢官网 112{
亚洲必赢官网 113            return cmd.Parameters[parameterName];
亚洲必赢官网 114        }
亚洲必赢官网 115
亚洲必赢官网 116        #endregion
亚洲必赢官网 117
亚洲必赢官网 118亚洲必赢官网 119        执行#region 执行
亚洲必赢官网 120        public DataSet ExecuteDataSet(DbCommand cmd)
亚洲必赢官网 121亚洲必赢官网 122        亚洲必赢官网 123{
亚洲必赢官网 124            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 125            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 126            dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 127            DataSet ds = new DataSet();
亚洲必赢官网 128            dbDataAdapter.Fill(ds);
亚洲必赢官网 129            return ds;
亚洲必赢官网 130        }
亚洲必赢官网 131
亚洲必赢官网 132        public DataTable ExecuteDataTable(DbCommand cmd)
亚洲必赢官网 133亚洲必赢官网 134        亚洲必赢官网 135{
亚洲必赢官网 136            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 137            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 138            dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 139            DataTable dataTable = new DataTable();
亚洲必赢官网 140            dbDataAdapter.Fill(dataTable);
亚洲必赢官网 141            return dataTable;
亚洲必赢官网 142        }
亚洲必赢官网 143
亚洲必赢官网 144        public DbDataReader ExecuteReader(DbCommand cmd)
亚洲必赢官网 145亚洲必赢官网 146        亚洲必赢官网 147{
亚洲必赢官网 148            cmd.Connection.Open();
亚洲必赢官网 149            DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);            
亚洲必赢官网 150            return reader;
亚洲必赢官网 151        }
亚洲必赢官网 152        public int ExecuteNonQuery(DbCommand cmd)
亚洲必赢官网 153亚洲必赢官网 154        亚洲必赢官网 155{
亚洲必赢官网 156            cmd.Connection.Open();
亚洲必赢官网 157            int ret = cmd.ExecuteNonQuery();
亚洲必赢官网 158            cmd.Connection.Close();
亚洲必赢官网 159            return ret;
亚洲必赢官网 160        }
亚洲必赢官网 161
亚洲必赢官网 162        public object ExecuteScalar(DbCommand cmd)
亚洲必赢官网 163亚洲必赢官网 164        亚洲必赢官网 165{
亚洲必赢官网 166            cmd.Connection.Open();
亚洲必赢官网 167            object ret = cmd.ExecuteScalar();
亚洲必赢官网 168            cmd.Connection.Close();
亚洲必赢官网 169            return ret;
亚洲必赢官网 170        }
亚洲必赢官网 171        #endregion        
亚洲必赢官网 172
亚洲必赢官网 173亚洲必赢官网 174        执行工作#region 执行工作
亚洲必赢官网 175        public DataSet ExecuteDataSet(DbCommand cmd,Trans t)
亚洲必赢官网 176亚洲必赢官网 177        亚洲必赢官网 178{
亚洲必赢官网 179            cmd.Connection = t.DbConnection;
亚洲必赢官网 180            cmd.Transaction = t.DbTrans;
亚洲必赢官网 181            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 182            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 183            dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 184            DataSet ds = new DataSet();
亚洲必赢官网 185            dbDataAdapter.Fill(ds);
亚洲必赢官网 186            return ds;
亚洲必赢官网 187        }
亚洲必赢官网 188
亚洲必赢官网 189        public DataTable ExecuteDataTable(DbCommand cmd, Trans t)
亚洲必赢官网 190亚洲必赢官网 191        亚洲必赢官网 192{
亚洲必赢官网 193            cmd.Connection = t.DbConnection;
亚洲必赢官网 194            cmd.Transaction = t.DbTrans;
亚洲必赢官网 195            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 196            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 197            dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 198            DataTable dataTable = new DataTable();
亚洲必赢官网 199            dbDataAdapter.Fill(dataTable);
亚洲必赢官网 200            return dataTable;
亚洲必赢官网 201        }
亚洲必赢官网 202
亚洲必赢官网 203        public DbDataReader ExecuteReader(DbCommand cmd, Trans t)
亚洲必赢官网 204亚洲必赢官网 205        亚洲必赢官网 206{
亚洲必赢官网 207            cmd.Connection.Close();
亚洲必赢官网 208            cmd.Connection = t.DbConnection;
亚洲必赢官网 209            cmd.Transaction = t.DbTrans;            
亚洲必赢官网 210            DbDataReader reader = cmd.ExecuteReader();
亚洲必赢官网 211            DataTable dt = new DataTable();            
亚洲必赢官网 212            return reader;
亚洲必赢官网 213        }
亚洲必赢官网 214        public int ExecuteNonQuery(DbCommand cmd, Trans t)
亚洲必赢官网 215亚洲必赢官网 216        亚洲必赢官网 217{
亚洲必赢官网 218            cmd.Connection.Close();
亚洲必赢官网 219            cmd.Connection = t.DbConnection;
亚洲必赢官网 220            cmd.Transaction = t.DbTrans;  
亚洲必赢官网 221            int ret = cmd.ExecuteNonQuery();            
亚洲必赢官网 222            return ret;
亚洲必赢官网 223        }
亚洲必赢官网 224
亚洲必赢官网 225        public object ExecuteScalar(DbCommand cmd, Trans t)
亚洲必赢官网 226亚洲必赢官网 227        亚洲必赢官网 228{
亚洲必赢官网 229            cmd.Connection.Close();
亚洲必赢官网 230            cmd.Connection = t.DbConnection;
亚洲必赢官网 231            cmd.Transaction = t.DbTrans;  
亚洲必赢官网 232            object ret = cmd.ExecuteScalar();            
亚洲必赢官网 233            return ret;
亚洲必赢官网 234        }
亚洲必赢官网 235        #endregion
亚洲必赢官网 236    }
亚洲必赢官网 237
亚洲必赢官网 238    public class Trans : IDisposable
亚洲必赢官网 239亚洲必赢官网 240    亚洲必赢官网 241{
亚洲必赢官网 242        private DbConnection conn;
亚洲必赢官网 243        private DbTransaction dbTrans;
亚洲必赢官网 244        public DbConnection DbConnection
亚洲必赢官网 245亚洲必赢官网 246        亚洲必赢官网 247{
亚洲必赢官网 248亚洲必赢官网 249            get 亚洲必赢官网 250{ return this.conn; }
亚洲必赢官网 251        }
亚洲必赢官网 252        public DbTransaction DbTrans
亚洲必赢官网 253亚洲必赢官网 254        亚洲必赢官网 255{
亚洲必赢官网 256亚洲必赢官网 257            get 亚洲必赢官网 258{ return this.dbTrans; }
亚洲必赢官网 259        }
亚洲必赢官网 260
亚洲必赢官网 261        public Trans()
亚洲必赢官网 262亚洲必赢官网 263        亚洲必赢官网 264{
亚洲必赢官网 265            conn = DbHelper.CreateConnection();
亚洲必赢官网 266            conn.Open();
亚洲必赢官网 267            dbTrans = conn.BeginTransaction();
亚洲必赢官网 268        }
亚洲必赢官网 269        public Trans(string connectionString)
亚洲必赢官网 270亚洲必赢官网 271        亚洲必赢官网 272{
亚洲必赢官网 273            conn = DbHelper.CreateConnection(connectionString);
亚洲必赢官网 274            conn.Open();
亚洲必赢官网 275            dbTrans = conn.BeginTransaction();
亚洲必赢官网 276        }
亚洲必赢官网 277        public void Commit()
亚洲必赢官网 278亚洲必赢官网 279        亚洲必赢官网 280{
亚洲必赢官网 281            dbTrans.Commit();
亚洲必赢官网 282            this.Colse();
亚洲必赢官网 283        }
亚洲必赢官网 284
亚洲必赢官网 285        public void RollBack()
亚洲必赢官网 286亚洲必赢官网 287        亚洲必赢官网 288{
亚洲必赢官网 289            dbTrans.Rollback();
亚洲必赢官网 290            this.Colse();
亚洲必赢官网 291        }
亚洲必赢官网 292
亚洲必赢官网 293        public void Dispose()
亚洲必赢官网 294亚洲必赢官网 295        亚洲必赢官网 296{
亚洲必赢官网 297            this.Colse();
亚洲必赢官网 298        }
亚洲必赢官网 299
亚洲必赢官网 300        public void Colse()
亚洲必赢官网 301亚洲必赢官网 302        亚洲必赢官网 303{
亚洲必赢官网 304            if (conn.State == System.Data.ConnectionState.Open)
亚洲必赢官网 305亚洲必赢官网 306            亚洲必赢官网 307{
亚洲必赢官网 308                conn.Close();
亚洲必赢官网 309            }
亚洲必赢官网 310        }
亚洲必赢官网 311    }

 

  1. 其对应的.NET数据类型。

亚洲必赢官网 312 using System;
亚洲必赢官网 313 using System.Data;
亚洲必赢官网 314 using
System.Data.Common;
亚洲必赢官网 315 using
System.Configuration;
亚洲必赢官网 316
亚洲必赢官网 317 public class DbHelper
亚洲必赢官网 318亚洲必赢官网 319
亚洲必赢官网 320{
亚洲必赢官网 321 private static string
dbProviderName =
ConfigurationManager.AppSettings[“DbHelperProvider”];
亚洲必赢官网 322 private static string
dbConnectionString =
ConfigurationManager.AppSettings[“DbHelperConnectionString”];
亚洲必赢官网 323
亚洲必赢官网 324 private DbConnection
connection;
亚洲必赢官网 325 public DbHelper()
亚洲必赢官网 326亚洲必赢官网 327
亚洲必赢官网 328{
亚洲必赢官网 329 this.connection =
CreateConnection(DbHelper.dbConnectionString);
亚洲必赢官网 330        }
亚洲必赢官网 331 public DbHelper(string
connectionString)
亚洲必赢官网 332亚洲必赢官网 333
亚洲必赢官网 334{
亚洲必赢官网 335 this.connection =
CreateConnection(connectionString);
亚洲必赢官网 336        }
亚洲必赢官网 337 public static DbConnection
CreateConnection()
亚洲必赢官网 338亚洲必赢官网 339
亚洲必赢官网 340{
亚洲必赢官网 341           
DbProviderFactory dbfactory =
DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 342            DbConnection
dbconn = dbfactory.CreateConnection();
亚洲必赢官网 343           
dbconn.ConnectionString = DbHelper.dbConnectionString;
亚洲必赢官网 344 return dbconn;
亚洲必赢官网 345        }
亚洲必赢官网 346 public static DbConnection
CreateConnection(string connectionString)
亚洲必赢官网 347亚洲必赢官网 348
亚洲必赢官网 349{
亚洲必赢官网 350           
DbProviderFactory dbfactory =
DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 351            DbConnection
dbconn = dbfactory.CreateConnection();
亚洲必赢官网 352           
dbconn.ConnectionString = connectionString;
亚洲必赢官网 353 return dbconn;
亚洲必赢官网 354        }
亚洲必赢官网 355
亚洲必赢官网 356 public DbCommand
GetStoredProcCommond(string storedProcedure)
亚洲必赢官网 357亚洲必赢官网 358
亚洲必赢官网 359{
亚洲必赢官网 360            DbCommand
dbCommand = connection.CreateCommand();
亚洲必赢官网 361           
dbCommand.CommandText = storedProcedure;
亚洲必赢官网 362           
dbCommand.CommandType = CommandType.StoredProcedure;
亚洲必赢官网 363 return dbCommand;
亚洲必赢官网 364        }
亚洲必赢官网 365 public DbCommand
GetSqlStringCommond(string sqlQuery)
亚洲必赢官网 366亚洲必赢官网 367
亚洲必赢官网 368{
亚洲必赢官网 369            DbCommand
dbCommand = connection.CreateCommand();
亚洲必赢官网 370           
dbCommand.CommandText = sqlQuery;
亚洲必赢官网 371           
dbCommand.CommandType = CommandType.Text;
亚洲必赢官网 372 return dbCommand;
亚洲必赢官网 373        }
亚洲必赢官网 374
亚洲必赢官网 375亚洲必赢官网 376
扩充参数#region 扩大参数
亚洲必赢官网 377 public void
AddParameterCollection(DbCommand cmd, DbParameterCollection
dbParameterCollection)
亚洲必赢官网 378亚洲必赢官网 379
亚洲必赢官网 380{
亚洲必赢官网 381 foreach (DbParameter
dbParameter in dbParameterCollection)
亚洲必赢官网 382亚洲必赢官网 383
亚洲必赢官网 384{
亚洲必赢官网 385               
cmd.Parameters.Add(dbParameter);
亚洲必赢官网 386            }
亚洲必赢官网 387        }
亚洲必赢官网 388 public void
AddOutParameter(DbCommand cmd, string parameterName, DbType dbType, int
size)
亚洲必赢官网 389亚洲必赢官网 390
亚洲必赢官网 391{
亚洲必赢官网 392            DbParameter
dbParameter = cmd.CreateParameter();
亚洲必赢官网 393           
dbParameter.DbType = dbType;
亚洲必赢官网 394           
dbParameter.ParameterName = parameterName;
亚洲必赢官网 395           
dbParameter.Size = size;
亚洲必赢官网 396           
dbParameter.Direction = ParameterDirection.Output;
亚洲必赢官网 397           
cmd.Parameters.Add(dbParameter);
亚洲必赢官网 398        }
亚洲必赢官网 399 public void
AddInParameter(DbCommand cmd, string parameterName, DbType dbType,
object value)
亚洲必赢官网 400亚洲必赢官网 401
亚洲必赢官网 402{
亚洲必赢官网 403            DbParameter
dbParameter = cmd.CreateParameter();
亚洲必赢官网 404           
dbParameter.DbType = dbType;
亚洲必赢官网 405           
dbParameter.ParameterName = parameterName;
亚洲必赢官网 406           
dbParameter.Value = value;
亚洲必赢官网 407           
dbParameter.Direction = ParameterDirection.Input;
亚洲必赢官网 408           
cmd.Parameters.Add(dbParameter);
亚洲必赢官网 409        }
亚洲必赢官网 410 public void
AddReturnParameter(DbCommand cmd, string parameterName, DbType dbType)
亚洲必赢官网 411亚洲必赢官网 412
亚洲必赢官网 413{
亚洲必赢官网 414            DbParameter
dbParameter = cmd.CreateParameter();
亚洲必赢官网 415           
dbParameter.DbType = dbType;
亚洲必赢官网 416           
dbParameter.ParameterName = parameterName;
亚洲必赢官网 417           
dbParameter.Direction = ParameterDirection.ReturnValue;
亚洲必赢官网 418           
cmd.Parameters.Add(dbParameter);
亚洲必赢官网 419        }
亚洲必赢官网 420 public DbParameter
GetParameter(DbCommand cmd, string parameterName)
亚洲必赢官网 421亚洲必赢官网 422
亚洲必赢官网 423{
亚洲必赢官网 424 return
cmd.Parameters[parameterName];
亚洲必赢官网 425        }
亚洲必赢官网 426
亚洲必赢官网 427 #endregion
亚洲必赢官网 428
亚洲必赢官网 429亚洲必赢官网 430
执行#region 执行
亚洲必赢官网 431 public DataSet
ExecuteDataSet(DbCommand cmd)
亚洲必赢官网 432亚洲必赢官网 433
亚洲必赢官网 434{
亚洲必赢官网 435           
DbProviderFactory dbfactory =
DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 436            DbDataAdapter
dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 437           
dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 438            DataSet ds =
new DataSet();
亚洲必赢官网 439           
dbDataAdapter.Fill(ds);
亚洲必赢官网 440 return ds;
亚洲必赢官网 441        }
亚洲必赢官网 442
亚洲必赢官网 443 public DataTable
ExecuteDataTable(DbCommand cmd)
亚洲必赢官网 444亚洲必赢官网 445
亚洲必赢官网 446{
亚洲必赢官网 447           
DbProviderFactory dbfactory =
DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 448            DbDataAdapter
dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 449           
dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 450            DataTable
dataTable = new DataTable();
亚洲必赢官网 451           
dbDataAdapter.Fill(dataTable);
亚洲必赢官网 452 return dataTable;
亚洲必赢官网 453        }
亚洲必赢官网 454
亚洲必赢官网 455 public DbDataReader
ExecuteReader(DbCommand cmd)
亚洲必赢官网 456亚洲必赢官网 457
亚洲必赢官网 458{
亚洲必赢官网 459           
cmd.Connection.Open();
亚洲必赢官网 460            DbDataReader
reader =
cmd.ExecuteReader(CommandBehavior.CloseConnection);           
亚洲必赢官网 461 return reader;
亚洲必赢官网 462        }
亚洲必赢官网 463 public int
ExecuteNonQuery(DbCommand cmd)
亚洲必赢官网 464亚洲必赢官网 465
亚洲必赢官网 466{
亚洲必赢官网 467           
cmd.Connection.Open();
亚洲必赢官网 468 int ret =
cmd.ExecuteNonQuery();
亚洲必赢官网 469           
cmd.Connection.Close();
亚洲必赢官网 470 return ret;
亚洲必赢官网 471        }
亚洲必赢官网 472
亚洲必赢官网 473 public object
ExecuteScalar(DbCommand cmd)
亚洲必赢官网 474亚洲必赢官网 475
亚洲必赢官网 476{
亚洲必赢官网 477           
cmd.Connection.Open();
亚洲必赢官网 478 object ret =
cmd.ExecuteScalar();
亚洲必赢官网 479           
cmd.Connection.Close();
亚洲必赢官网 480 return ret;
亚洲必赢官网 481        }
亚洲必赢官网 482 #endregion
亚洲必赢官网 483
亚洲必赢官网 484亚洲必赢官网 485
执行工作#region 执行工作
亚洲必赢官网 486 public DataSet
ExecuteDataSet(DbCommand cmd,Trans t)
亚洲必赢官网 487亚洲必赢官网 488
亚洲必赢官网 489{
亚洲必赢官网 490            cmd.Connection
= t.DbConnection;
亚洲必赢官网 491            cmd.Transaction
= t.DbTrans;
亚洲必赢官网 492           
DbProviderFactory dbfactory =
DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 493            DbDataAdapter
dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 494           
dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 495            DataSet ds =
new DataSet();
亚洲必赢官网 496           
dbDataAdapter.Fill(ds);
亚洲必赢官网 497 return ds;
亚洲必赢官网 498        }
亚洲必赢官网 499
亚洲必赢官网 500 public DataTable
ExecuteDataTable(DbCommand cmd, Trans t)
亚洲必赢官网 501亚洲必赢官网 502
亚洲必赢官网 503{
亚洲必赢官网 504            cmd.Connection
= t.DbConnection;
亚洲必赢官网 505            cmd.Transaction
= t.DbTrans;
亚洲必赢官网 506           
DbProviderFactory dbfactory =
DbProviderFactories.GetFactory(DbHelper.dbProviderName);
亚洲必赢官网 507            DbDataAdapter
dbDataAdapter = dbfactory.CreateDataAdapter();
亚洲必赢官网 508           
dbDataAdapter.SelectCommand = cmd;
亚洲必赢官网 509            DataTable
dataTable = new DataTable();
亚洲必赢官网 510           
dbDataAdapter.Fill(dataTable);
亚洲必赢官网 511 return dataTable;
亚洲必赢官网 512        }
亚洲必赢官网 513
亚洲必赢官网 514 public DbDataReader
ExecuteReader(DbCommand cmd, Trans t)
亚洲必赢官网 515亚洲必赢官网 516
亚洲必赢官网 517{
亚洲必赢官网 518           
cmd.Connection.Close();
亚洲必赢官网 519            cmd.Connection
= t.DbConnection;
亚洲必赢官网 520            cmd.Transaction
= t.DbTrans;           
亚洲必赢官网 521            DbDataReader
reader = cmd.ExecuteReader();
亚洲必赢官网 522            DataTable dt =
new DataTable();           
亚洲必赢官网 523 return reader;
亚洲必赢官网 524        }
亚洲必赢官网 525 public int
ExecuteNonQuery(DbCommand cmd, Trans t)
亚洲必赢官网 526亚洲必赢官网 527
亚洲必赢官网 528{
亚洲必赢官网 529           
cmd.Connection.Close();
亚洲必赢官网 530            cmd.Connection
= t.DbConnection;
亚洲必赢官网 531            cmd.Transaction
= t.DbTrans; 
亚洲必赢官网 532 int ret =
cmd.ExecuteNonQuery();           
亚洲必赢官网 533 return ret;
亚洲必赢官网 534        }
亚洲必赢官网 535
亚洲必赢官网 536 public object
ExecuteScalar(DbCommand cmd, Trans t)
亚洲必赢官网 537亚洲必赢官网 538
亚洲必赢官网 539{
亚洲必赢官网 540           
cmd.Connection.Close();
亚洲必赢官网 541            cmd.Connection
= t.DbConnection;
亚洲必赢官网 542            cmd.Transaction
= t.DbTrans; 
亚洲必赢官网 543 object ret =
cmd.ExecuteScalar();           
亚洲必赢官网 544 return ret;
亚洲必赢官网 545        }
亚洲必赢官网 546 #endregion
亚洲必赢官网 547    }
亚洲必赢官网 548
亚洲必赢官网 549 public class Trans :
IDisposable
亚洲必赢官网 550亚洲必赢官网 551
亚洲必赢官网 552{
亚洲必赢官网 553 private DbConnection
conn;
亚洲必赢官网 554 private DbTransaction
dbTrans;
亚洲必赢官网 555 public DbConnection
DbConnection
亚洲必赢官网 556亚洲必赢官网 557
亚洲必赢官网 558{
亚洲必赢官网 559亚洲必赢官网 560
get 亚洲必赢官网 561{ return this.conn; }
亚洲必赢官网 562        }
亚洲必赢官网 563 public DbTransaction
DbTrans
亚洲必赢官网 564亚洲必赢官网 565
亚洲必赢官网 566{
亚洲必赢官网 567亚洲必赢官网 568
get 亚洲必赢官网 569{ return this.dbTrans;
}
亚洲必赢官网 570        }
亚洲必赢官网 571
亚洲必赢官网 572 public Trans()
亚洲必赢官网 573亚洲必赢官网 574
亚洲必赢官网 575{
亚洲必赢官网 576            conn =
DbHelper.CreateConnection();
亚洲必赢官网 577            conn.Open();
亚洲必赢官网 578            dbTrans =
conn.BeginTransaction();
亚洲必赢官网 579        }
亚洲必赢官网 580 public Trans(string
connectionString)
亚洲必赢官网 581亚洲必赢官网 582
亚洲必赢官网 583{
亚洲必赢官网 584            conn =
DbHelper.CreateConnection(connectionString);
亚洲必赢官网 585            conn.Open();
亚洲必赢官网 586            dbTrans =
conn.BeginTransaction();
亚洲必赢官网 587        }
亚洲必赢官网 588 public void Commit()
亚洲必赢官网 589亚洲必赢官网 590
亚洲必赢官网 591{
亚洲必赢官网 592           
dbTrans.Commit();
亚洲必赢官网 593 this.Colse();
亚洲必赢官网 594        }
亚洲必赢官网 595
亚洲必赢官网 596 public void RollBack()
亚洲必赢官网 597亚洲必赢官网 598
亚洲必赢官网 599{
亚洲必赢官网 600           
dbTrans.Rollback();
亚洲必赢官网 601 this.Colse();
亚洲必赢官网 602        }
亚洲必赢官网 603
亚洲必赢官网 604 public void Dispose()
亚洲必赢官网 605亚洲必赢官网 606
亚洲必赢官网 607{
亚洲必赢官网 608 this.Colse();
亚洲必赢官网 609        }
亚洲必赢官网 610
亚洲必赢官网 611 public void Colse()
亚洲必赢官网 612亚洲必赢官网 613
亚洲必赢官网 614{
亚洲必赢官网 615 if (conn.State ==
System.Data.ConnectionState.Open)
亚洲必赢官网 616亚洲必赢官网 617
亚洲必赢官网 618{
亚洲必赢官网 619               
conn.Close();
亚洲必赢官网 620            }
亚洲必赢官网 621        }
亚洲必赢官网 622    }

那正是说怎么着利用它吗?上面小编付诸一些主导的应用示例,基本能满足你当先六分之三的数据库操作供给了.
1)直接执行sql语句

一、在System.Data.Common命名空间下,存在这么的二个类:

即时,对壹1分化的数据库是独家完毕这几个“数据库小工具”的。

那么哪些利用它吗?上边小编付出一些着力的使用示例,基本能满足你超过八分之四的数据库操作供给了.
壹)直接实施sql语句

亚洲必赢官网 623        DbHelper db = new DbHelper();
亚洲必赢官网 624        DbCommand cmd = db.GetSqlStringCommond(“insert t1 (id)values(‘haha’)”);
亚洲必赢官网 625        db.ExecuteNonQuery(cmd);

    //
    // 摘要:
    //     表示一组方法,这些方法用于创建提供程序对数据源类的实现的实例。
    public abstract class DbProviderFactory
    {
        //
        // 摘要:
        //     初始化 System.Data.Common.DbProviderFactory 类的新实例。
        protected DbProviderFactory();

        //
        // 摘要:
        //     指定特定的 System.Data.Common.DbProviderFactory 是否支持 System.Data.Common.DbDataSourceEnumerator
        //     类。
        //
        // 返回结果:
        //     如果 System.Data.Common.DbProviderFactory 的实例支持 System.Data.Common.DbDataSourceEnumerator
        //     类,则为 true;否则为 false。
        public virtual bool CanCreateDataSourceEnumerator { get; }

        //
        // 摘要:
        //     返回实现 System.Data.Common.DbCommand 类的提供程序的类的一个新实例。
        //
        // 返回结果:
        //     System.Data.Common.DbCommand 的新实例。
        public virtual DbCommand CreateCommand();
        //
        // 摘要:
        //     返回实现 System.Data.Common.DbCommandBuilder 类的提供程序的类的一个新实例。
        //
        // 返回结果:
        //     System.Data.Common.DbCommandBuilder 的新实例。
        public virtual DbCommandBuilder CreateCommandBuilder();
        //
        // 摘要:
        //     返回实现 System.Data.Common.DbConnection 类的提供程序的类的一个新实例。
        //
        // 返回结果:
        //     System.Data.Common.DbConnection 的新实例。
        public virtual DbConnection CreateConnection();
        //
        // 摘要:
        //     返回实现 System.Data.Common.DbConnectionStringBuilder 类的提供程序的类的一个新实例。
        //
        // 返回结果:
        //     System.Data.Common.DbConnectionStringBuilder 的新实例。
        public virtual DbConnectionStringBuilder CreateConnectionStringBuilder();
        //
        // 摘要:
        //     返回实现 System.Data.Common.DbDataAdapter 类的提供程序的类的一个新实例。
        //
        // 返回结果:
        //     System.Data.Common.DbDataAdapter 的新实例。
        public virtual DbDataAdapter CreateDataAdapter();
        //
        // 摘要:
        //     返回实现 System.Data.Common.DbDataSourceEnumerator 类的提供程序的类的一个新实例。
        //
        // 返回结果:
        //     System.Data.Common.DbDataSourceEnumerator 的新实例。
        public virtual DbDataSourceEnumerator CreateDataSourceEnumerator();
        //
        // 摘要:
        //     返回实现 System.Data.Common.DbParameter 类的提供程序的类的一个新实例。
        //
        // 返回结果:
        //     System.Data.Common.DbParameter 的新实例。
        public virtual DbParameter CreateParameter();
        //
        // 摘要:
        //     返回提供程序的类的新实例,该实例可实现提供程序的 System.Security.CodeAccessPermission 类的版本。
        //
        // 参数:
        //   state:
        //     System.Security.Permissions.PermissionState 值之一。
        //
        // 返回结果:
        //     指定 System.Security.Permissions.PermissionState 的 System.Security.CodeAccessPermission
        //     对象。
        public virtual CodeAccessPermission CreatePermission(PermissionState state);
    }

到现在,让我们将这几个独立的“小工具”整合在联合署名啊。

亚洲必赢官网 626        DbHelper db = new
DbHelper();
亚洲必赢官网 627        DbCommand cmd =
db.GetSqlStringCommond(“insert t1 (id)values(‘haha’)”);
亚洲必赢官网 628       
db.ExecuteNonQuery(cmd);

二)执行存款和储蓄进度

咱俩得以看来,在此类中,有比比皆是用来成立数据库相关对象的品类,如DbConnection,DbCommand,DbData艾达pter等。

亚洲必赢官网 629

二)执行存款和储蓄进度

亚洲必赢官网 630        DbHelper db = new DbHelper();
亚洲必赢官网 631        DbCommand cmd = db.GetStoredProcCommond(“t1_insert”);
亚洲必赢官网 632        db.AddInParameter(cmd, “@id”, DbType.String, “heihei”);
亚洲必赢官网 633        db.ExecuteNonQuery(cmd);

同时,完结诸如SqlConnection、SqlCommand、SqlDataAdapter(那里用的是SQL
Server)的档次,都分别继承自DbConnection,DbCommand,DbData艾达pter,

从上海体育地方中可以看出 Odbc、奥莱Db、Oracle、SQL Server、SQL Server Mobile
艾德ition、SQL Server Compact 艾德ition、SQLite、MySql
等数据库都曾经组成在同3个先后中了。

亚洲必赢官网 634        DbHelper db = new
DbHelper();
亚洲必赢官网 635        DbCommand cmd =
db.GetStoredProcCommond(“t1_insert”);
亚洲必赢官网 636       
db.AddInParameter(cmd, “@id”, DbType.String, “heihei”);
亚洲必赢官网 637       
db.ExecuteNonQuery(cmd);

3)返回DataSet

故此,大家得以行使DbProviderFactory来创建我们想要的、可完结其他数据库的DbHelper。

亚洲必赢官网 638

3)返回DataSet

亚洲必赢官网 639        DbHelper db = new DbHelper();
亚洲必赢官网 640        DbCommand cmd = db.GetSqlStringCommond(“select * from t1”);
亚洲必赢官网 641        DataSet ds = db.ExecuteDataSet(cmd);

二、达成中央的DbHelper帮助类

上海体育场合展现执行一条 SQL 语句后的结果。

亚洲必赢官网 642        DbHelper db = new
DbHelper();
亚洲必赢官网 643        DbCommand cmd =
db.GetSqlStringCommond(“select * from t1”);
亚洲必赢官网 644        DataSet ds =
db.ExecuteDataSet(cmd);

4)返回DataTable

一、大家将DbHelper定义为抽象类,并在类中提供1个虚幻可读属性,名称为DbProviderFactory,返回类型为DbProviderFactory(注:名称与重临类型能够为同一,也得以不壹样),

亚洲必赢官网 645

4)返回DataTable

亚洲必赢官网 646        DbHelper db = new DbHelper();
亚洲必赢官网 647        DbCommand cmd = db.GetSqlStringCommond(“t1_findall”);
亚洲必赢官网 648        DataTable dt = db.ExecuteDataTable(cmd);

二、大家利用在该抽象类完成的子类中重写DbProviderFactory方法,并在子类的构造函数中为该属性赋值,该值正是壹度达成了实际数据库类型的DbProviderFactory。

上海体育场地展现出数据库中的表的布局。

亚洲必赢官网 649        DbHelper db = new
DbHelper();
亚洲必赢官网 650        DbCommand cmd =
db.GetSqlStringCommond(“t1_findall”);
亚洲必赢官网 651        DataTable dt =
db.ExecuteDataTable(cmd);

5)输入参数/输出参数/再次回到值的行使(相比较重大哦)

概念的代码参考如下:

好了,大家来看源程序吗:

5)输入参数/输出参数/重返值的行使(相比较关键哦)

亚洲必赢官网 652        DbHelper db = new DbHelper();
亚洲必赢官网 653        DbCommand cmd = db.GetStoredProcCommond(“t2_insert”);
亚洲必赢官网 654        db.AddInParameter(cmd, “@timeticks”, DbType.Int64, DateTime.Now.Ticks);
亚洲必赢官网 655        db.AddOutParameter(cmd, “@outString”, DbType.String, 20);
亚洲必赢官网 656        db.AddReturnParameter(cmd, “@returnValue”, DbType.Int32);
亚洲必赢官网 657
亚洲必赢官网 658        db.ExecuteNonQuery(cmd);
亚洲必赢官网 659
亚洲必赢官网 660        string s = db.GetParameter(cmd, “@outString”).Value as string;//out parameter
亚洲必赢官网 661        int r = Convert.ToInt32(db.GetParameter(cmd, “@returnValue”).Value);//return value
亚洲必赢官网 662

    public abstract class DbHelper
    {
        public abstract DbProviderFactory DbProviderFactory { get; }
    }
using System;
using System.IO;
using System.Data;
using System.Data.Common;
using System.Windows.Forms;

namespace Skyiv.Ben.DbTools
{
  public partial class MainForm : Form
  {
    public MainForm()
    {
      InitializeComponent();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
      try
      {
        tbxDsn.Text = "Data Source=:memory:";
        tbxSql.Text = "select sqlite_version()";
        var table = DbProviderFactories.GetFactoryClasses();
        lbxDbProvider.ValueMember = "InvariantName";
        lbxDbProvider.DataSource = table;
        dgvMain.DataSource = table;
        lbxDbProvider.SelectedValue = "System.Data.SQLite";
      }
      catch (Exception ex)
      {
        tbxMessage.AppendText(Pub.GetMessage(ex));
      }
    }

    private void btnSubmit_Click(object sender, EventArgs e)
    {
      btnSubmit.Enabled = false;
      try
      {
        tbxMessage.Clear();
        var factory = DbProviderFactories.GetFactory(lbxDbProvider.SelectedValue.ToString());
        using (var conn = factory.CreateConnection())
        {
          conn.ConnectionString = tbxDsn.Text;
          conn.Open();
          tbxMessage.AppendLine("Client Version: [{0}]", Pub.GetClientVersion(Path.GetFileNameWithoutExtension(factory.ToString())));
          tbxMessage.AppendLine("Server Version: [{0}]", conn.ServerVersion);
          var sql = tbxSql.Text.Trim();
          if (sql.Length != 0)
          {
            var comm = conn.CreateCommand();
            comm.CommandText = sql;
            var isQuery = IsQuery(sql);
            var rows = int.MinValue;
            if (!isQuery) rows = comm.ExecuteNonQuery();
            else if (chkStruct.Checked) dgvMain.DataSource = RunQueryTableStruct(comm);
            else dgvMain.DataSource = RunQueryTableData(factory, comm);
            tbxMessage.AppendText("运行 SQL 语句完毕(" + (!isQuery ? "非查询" : (chkStruct.Checked ? "表结构" : "查询")) + ")");
            if (rows >= 0) tbxMessage.AppendText(",受影响的行数: " + rows.ToString("N0"));
          }
          else tbxMessage.AppendText("完成");
        }
      }
      catch (Exception ex)
      {
        tbxMessage.AppendText(Pub.GetMessage(ex));
      }
      btnSubmit.Enabled = true;
    }

    DataView RunQueryTableStruct(DbCommand comm)
    {
      using (var r = comm.ExecuteReader(CommandBehavior.KeyInfo))
      {
        return r.GetSchemaTable().DefaultView;
      }
    }

    DataView RunQueryTableData(DbProviderFactory factory, DbCommand comm)
    {
      var da = factory.CreateDataAdapter();
      da.SelectCommand = comm;
      var ds = new DataSet();
      da.Fill(ds);
      return ds.Tables[0].DefaultView;
    }

    bool IsQuery(string sql)
    {
      return sql.ToUpper().StartsWith("SELECT");
    }
  }
}

亚洲必赢官网 663        DbHelper db = new
DbHelper();
亚洲必赢官网 664        DbCommand cmd =
db.GetStoredProcCommond(“t2_insert”);
亚洲必赢官网 665       
db.AddInParameter(cmd, “@timeticks”, DbType.Int64,
DateTime.Now.Ticks);
亚洲必赢官网 666       
db.AddOutParameter(cmd, “@outString”, DbType.String, 20);
亚洲必赢官网 667       
db.AddReturnParameter(cmd, “@returnValue”, DbType.Int32);
亚洲必赢官网 668
亚洲必赢官网 669       
db.ExecuteNonQuery(cmd);
亚洲必赢官网 670
亚洲必赢官网 671 string s =
db.GetParameter(cmd, “@outString”).Value as string;//out parameter
亚洲必赢官网 672 int r =
Convert.ToInt32(db.GetParameter(cmd, “@returnValue”).Value);//return
value
亚洲必赢官网 673

6)DataReader使用

三、大家为该抽象类编写3个构造函数,传进去的参数为总是字符串,并将其储存在可读的ConnectionString字段里,代码如下:

以此程序首要采纳 System.Data.Common 命名空间中的类来展开工作 。

6)DataReader使用

亚洲必赢官网 674      DbHelper db = new DbHelper();
亚洲必赢官网 675        DbCommand cmd = db.GetStoredProcCommond(“t2_insert”);
亚洲必赢官网 676        db.AddInParameter(cmd, “@timeticks”, DbType.Int64, DateTime.Now.Ticks);
亚洲必赢官网 677        db.AddOutParameter(cmd, “@outString”, DbType.String, 20);
亚洲必赢官网 678        db.AddReturnParameter(cmd, “@returnValue”, DbType.Int32);
亚洲必赢官网 679
亚洲必赢官网 680        using (DbDataReader reader = db.ExecuteReader(cmd))
亚洲必赢官网 681亚洲必赢官网 682        亚洲必赢官网 683{
亚洲必赢官网 684            dt.Load(reader);
亚洲必赢官网 685        }        
亚洲必赢官网 686        string s = db.GetParameter(cmd, “@outString”).Value as string;//out parameter
亚洲必赢官网 687        int r = Convert.ToInt32(db.GetParameter(cmd, “@returnValue”).Value);//return value
亚洲必赢官网 688

    public abstract class DbHelper
    {
        public DbHelper(string connectionString)
        {
            ConnectionString = connectionString;
        }
        public string ConnectionString { get; }
        public abstract DbProviderFactory DbProviderFactory { get; }
    }

在 MainForm_Load 方法(第二6到32行)中运用 DbProviderFactories 的静态方法
GetFactoryClasses 得到在本机中达成 DbProviderFactories
的有着已设置提供程序的音讯(第3贰行),然后再将其绑定到程序主界面包车型地铁 ListBox(第贰四行) 和 DataGridView (第贰5行) 控件上。那样,那多少个控件就会联合浮动了。

亚洲必赢官网 689      DbHelper db = new
DbHelper();
亚洲必赢官网 690        DbCommand cmd =
db.GetStoredProcCommond(“t2_insert”);
亚洲必赢官网 691       
db.AddInParameter(cmd, “@timeticks”, DbType.Int64,
DateTime.Now.Ticks);
亚洲必赢官网 692       
db.AddOutParameter(cmd, “@outString”, DbType.String, 20);
亚洲必赢官网 693       
db.AddReturnParameter(cmd, “@returnValue”, DbType.Int32);
亚洲必赢官网 694
亚洲必赢官网 695 using (DbDataReader reader
= db.ExecuteReader(cmd))
亚洲必赢官网 696亚洲必赢官网 697
亚洲必赢官网 698{
亚洲必赢官网 699           
dt.Load(reader);
亚洲必赢官网 700        }
亚洲必赢官网 701 string s =
db.GetParameter(cmd, “@outString”).Value as string;//out parameter
亚洲必赢官网 702 int r =
Convert.ToInt32(db.GetParameter(cmd, “@returnValue”).Value);//return
value
亚洲必赢官网 703

7)事务的使用.(项目中需求将着力的数据库操作组合成3个完完全全的作业流时,代码级的作业是必需的哦)

肆、在DbHelper编写一些用以落实数据库相关操作的格局,那里就用到了DbProviderFactory类中的方法,以下方法仅供参考,具体请参考其余完整的DbHelp帮助类,

点击“执行”按钮,就会调用 btnSubmit_Click 方法(第二肆到6八行)。在该格局中:

7)事务的使用.(项目中必要将挑建邺的数据库操作组合成二个完好无损的事情流时,代码级的事体是须要的啊)

亚洲必赢官网 704    pubic void DoBusiness()
亚洲必赢官网 705亚洲必赢官网 706    亚洲必赢官网 707{
亚洲必赢官网 708        using (Trans t = new Trans())
亚洲必赢官网 709亚洲必赢官网 710        亚洲必赢官网 711亚洲必赢官网,{
亚洲必赢官网 712            try
亚洲必赢官网 713亚洲必赢官网 714            亚洲必赢官网 715{
亚洲必赢官网 716                D1(t);
亚洲必赢官网 717                throw new Exception();//假诺有非凡,会回滚滴
亚洲必赢官网 718                D2(t);
亚洲必赢官网 719                t.Commit();
亚洲必赢官网 720            }
亚洲必赢官网 721            catch
亚洲必赢官网 722亚洲必赢官网 723            亚洲必赢官网 724{
亚洲必赢官网 725                t.RollBack();
亚洲必赢官网 726            }
亚洲必赢官网 727        }
亚洲必赢官网 728    }
亚洲必赢官网 729    public void D1(Trans t)
亚洲必赢官网 730亚洲必赢官网 731    亚洲必赢官网 732{
亚洲必赢官网 733        DbHelper db = new DbHelper();
亚洲必赢官网 734        DbCommand cmd = db.GetStoredProcCommond(“t2_insert”);
亚洲必赢官网 735        db.AddInParameter(cmd, “@timeticks”, DbType.Int64, DateTime.Now.Ticks);
亚洲必赢官网 736        db.AddOutParameter(cmd, “@outString”, DbType.String, 20);
亚洲必赢官网 737        db.AddReturnParameter(cmd, “@returnValue”, DbType.Int32);
亚洲必赢官网 738
亚洲必赢官网 739        if (t == null) db.ExecuteNonQuery(cmd);
亚洲必赢官网 740        else db.ExecuteNonQuery(cmd,t);
亚洲必赢官网 741
亚洲必赢官网 742        string s = db.GetParameter(cmd, “@outString”).Value as string;//out parameter
亚洲必赢官网 743        int r = Convert.ToInt32(db.GetParameter(cmd, “@returnValue”).Value);//return value
亚洲必赢官网 744    }
亚洲必赢官网 745    public void D2(Trans t)
亚洲必赢官网 746亚洲必赢官网 747    亚洲必赢官网 748{
亚洲必赢官网 749        DbHelper db = new DbHelper();
亚洲必赢官网 750        DbCommand cmd = db.GetSqlStringCommond(“insert t1 (id)values(‘亚洲必赢官网 751..’)”);        
亚洲必赢官网 752        if (t == null) db.ExecuteNonQuery(cmd);
亚洲必赢官网 753        else db.ExecuteNonQuery(cmd, t);
亚洲必赢官网 754    }

DbHelper完整代码如下:

  • 使用 DbProviderFactories 类的静态方法 GetFactory 获得三个DbProviderFactory (第四0行)。
  • 接纳 DbProviderFactory 类的 CreateConnection 方法创立1个DbConnection (第四一行)。
  • 动用 DbConnection 类的 Open 方法打开数据库连接(第五四行)。
  • 应用 DbConnection 类的 CreateCommand 方法创制2个 DbCommand
    (第伍0行)。
  • 要是要履行的 SQL 语句不是 SELECT 语句,则调用 DbCommand 类的
    ExecuteNonQuery 方法执行该 SQL 语句(第伍4行)。
  • 要不,若是程序主界面中的“结构”复选框被入选,就调用
    RunQueryTableStruct 方法赢得数据库中的表的布局(第肆五行)。
  • 不然,就调用 RunQueryTableData 方法赢得数据库中的表的数目(第陆6行)。

亚洲必赢官网 755    pubic void
DoBusiness()
亚洲必赢官网 756亚洲必赢官网 757
亚洲必赢官网 758{
亚洲必赢官网 759 using (Trans t = new
Trans())
亚洲必赢官网 760亚洲必赢官网 761
亚洲必赢官网 762{
亚洲必赢官网 763 try
亚洲必赢官网 764亚洲必赢官网 765
亚洲必赢官网 766{
亚洲必赢官网 767                D1(t);
亚洲必赢官网 768 throw new
Exception();//若是有尤其,会回滚滴
亚洲必赢官网 769                D2(t);
亚洲必赢官网 770               
t.Commit();
亚洲必赢官网 771            }
亚洲必赢官网 772 catch
亚洲必赢官网 773亚洲必赢官网 774
亚洲必赢官网 775{
亚洲必赢官网 776               
t.RollBack();
亚洲必赢官网 777            }
亚洲必赢官网 778        }
亚洲必赢官网 779    }
亚洲必赢官网 780 public void D1(Trans t)
亚洲必赢官网 781亚洲必赢官网 782
亚洲必赢官网 783{
亚洲必赢官网 784        DbHelper db = new
DbHelper();
亚洲必赢官网 785        DbCommand cmd =
db.GetStoredProcCommond(“t2_insert”);
亚洲必赢官网 786       
db.AddInParameter(cmd, “@timeticks”, DbType.Int64,
DateTime.Now.Ticks);
亚洲必赢官网 787       
db.AddOutParameter(cmd, “@outString”, DbType.String, 20);
亚洲必赢官网 788       
db.AddReturnParameter(cmd, “@returnValue”, DbType.Int32);
亚洲必赢官网 789
亚洲必赢官网 790 if (t == null)
db.ExecuteNonQuery(cmd);
亚洲必赢官网 791 else
db.ExecuteNonQuery(cmd,t);
亚洲必赢官网 792
亚洲必赢官网 793 string s =
db.GetParameter(cmd, “@outString”).Value as string;//out parameter
亚洲必赢官网 794 int r =
Convert.ToInt32(db.GetParameter(cmd, “@returnValue”).Value);//return
value
亚洲必赢官网 795    }
亚洲必赢官网 796 public void D2(Trans t)
亚洲必赢官网 797亚洲必赢官网 798
亚洲必赢官网 799{
亚洲必赢官网 800        DbHelper db = new
DbHelper();
亚洲必赢官网 801        DbCommand cmd =
db.GetSqlStringCommond(“insert t1
(id)values(‘亚洲必赢官网 802..’)”);       
亚洲必赢官网 803 if (t == null)
db.ExecuteNonQuery(cmd);
亚洲必赢官网 804 else
db.ExecuteNonQuery(cmd, t);
亚洲必赢官网 805    }

如上咱们好像从没点名数据库连接字符串,大家借使看下DbHelper的代码,就知晓要运用它必须在config中布署多个参数,如下:

//帮助类的基类(抽象类)
    public abstract class DbHelper
    {
        public DbHelper(string connectionString)
        {
            ConnectionString = connectionString;
        }

        public abstract DbProviderFactory DbProviderFactory {  get; } 

        public string ConnectionString { get; }

        //以下实现的帮助类方法,仅供该例子使用,具体请参照其他完整的DbHelp帮助类
        private void ThrowExceptionIfLengthNotEqual(string[] sqls, params DbParameter[][] parameters)
        {
            if (parameters.GetLength(0) != 0 && sqls.Length != parameters.GetLength(0)) throw new ArgumentException($"一维数组{nameof(sqls)}的长度与二维数组{nameof(parameters)}长度的第一维长度不一致");
        }

        private T[] Execute<T>(string[] sqls, CommandType commandType = CommandType.Text, ExecuteMode executeMode = ExecuteMode.NonQuery, params DbParameter[][] parameters)
        {
            ThrowExceptionIfLengthNotEqual(sqls, parameters);
            if(executeMode == ExecuteMode.NonQuery && typeof(T) != typeof(int)) throw new InvalidCastException("使用NonQuery模式时,必须将类型T指定为int");
            using (DbConnection connection = DbProviderFactory.CreateConnection())
            using (DbCommand command = DbProviderFactory.CreateCommand())
            {
                connection.ConnectionString = ConnectionString;
                connection.Open();
                command.Connection = connection;
                command.CommandType = commandType;
                DbTransaction transaction = connection.BeginTransaction();
                command.Transaction = transaction;
                try
                {
                    List<T> resultList = new List<T>();
                    for (int i = 0; i < sqls.Length; i++)
                    {
                        command.CommandText = sqls[i];
                        if (parameters.GetLength(0) != 0)
                        {
                            command.Parameters.Clear();
                            command.Parameters.AddRange(parameters[i]);
                        }
                        object result = null;
                        switch (executeMode)
                        {
                            case ExecuteMode.NonQuery:
                                result = command.ExecuteNonQuery(); break;
                            case ExecuteMode.Scalar:
                                result = command.ExecuteScalar(); break;
                            default: throw new NotImplementedException();
                        }
                        resultList.Add((T)Convert.ChangeType(result, typeof(T)));
                    }
                    transaction.Commit();
                    return resultList.ToArray();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }

        public int ExecuteNonQuery(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];

        public int[] ExecuteNonQuery(string[] sqls, params DbParameter[][] parameters)=> Execute<int>(sqls, CommandType.Text, ExecuteMode.NonQuery,parameters);

        public int ExecuteNonQueryWithProc(string sql, params DbParameter[] parameter) => ExecuteNonQueryWithProc(new string[] { sql },  new DbParameter[][] { parameter })[0];

        public int[] ExecuteNonQueryWithProc(string[] sqls, params DbParameter[][] parameters) => Execute<int>(sqls, CommandType.StoredProcedure, ExecuteMode.NonQuery, parameters);

        public T ExecuteScalar<T>(string sql, params DbParameter[] parameter) => ExecuteNonQuery<T>(new string[] { sql }, new DbParameter[][] { parameter })[0];

        public T[] ExecuteNonQuery<T>(string[] sqls, params DbParameter[][] parameters) => Execute<T>(sqls, CommandType.Text,ExecuteMode.Scalar, parameters);

        public T ExecuteScalarWithProc<T>(string sql, params DbParameter[] parameter) => ExecuteNonQuery<T>(new string[] { sql }, new DbParameter[][] { parameter })[0];

        public T[] ExecuteNonQueryWithProc<T>(string[] sqls, params DbParameter[][] parameters) => Execute<T>(sqls, CommandType.StoredProcedure, ExecuteMode.Scalar, parameters);

        enum ExecuteMode
        {
            NonQuery,Scalar
        }

        private DataTable[] Fill(string[] selectSqls, CommandType commandType = CommandType.Text, params DbParameter[][] parameters)
        {
            ThrowExceptionIfLengthNotEqual(selectSqls, parameters);
            using (DbConnection connection = DbProviderFactory.CreateConnection())
            using (DbDataAdapter adapter = DbProviderFactory.CreateDataAdapter())
            using (DbCommand command = DbProviderFactory.CreateCommand())
            {
                connection.ConnectionString = ConnectionString;
                connection.Open();
                command.Connection = connection;
                command.CommandType = commandType;
                adapter.SelectCommand = command;
                List<DataTable> resultList = new List<DataTable>();
                for (int i = 0; i < selectSqls.Length; i++)
                {
                    command.CommandText = selectSqls[i];
                    if (parameters.GetLength(0) != 0)
                    {
                        command.Parameters.Clear();
                        command.Parameters.AddRange(parameters[i]);
                    }
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    resultList.Add(table);
                }
                return resultList.ToArray();
            }
        }

        public DataTable Fill(string selectSql, params DbParameter[] parameter) => Fill(new string[] { selectSql }, new DbParameter[][] { parameter })[0];

        public DataTable[] Fill(string[] selectSqls, params DbParameter[][] parameters) => Fill(selectSqls, CommandType.Text, parameters);

        public DataTable FillWithProc(string selectSql, params DbParameter[] parameter) => FillWithProc(new string[] { selectSql }, new DbParameter[][] { parameter })[0];

        public DataTable[] FillWithProc(string[] selectSqls, params DbParameter[][] parameters) => Fill(selectSqls, CommandType.StoredProcedure, parameters);
    }

第90到7陆行的 RunQueryTableStruct 方法应用 DbCommand 类的 ExecuteReader
方法(使用 CommandBehavior.KeyInfo 参数)获得多个 DbDataReader
(第拾贰行),然后调用 DbData里德r 类的 GetSchemaTable
方法来得到数据库中的表的各列的元数据(第拾4行)。

以上大家好像一向不点名数据库连接字符串,大家只要看下DbHelper的代码,就清楚要采用它必须在config中布局八个参数,如下:

亚洲必赢官网 806    <appSettings>
亚洲必赢官网 807        <add key=”DbHelperProvider” value=”System.Data.SqlClient”/>
亚洲必赢官网 808        <add key=”DbHelperConnectionString” value=”Data Source=(local);Initial Catalog=DbHelperTest;Persist Security Info=True;User ID=sa;Password=sa”/>
亚洲必赢官网 809    </appSettings>

三、完成具体的数据库扶助类

第拾8到8五行的 RunQueryTableData 方法应用 DbProviderFactory 类的
CreateDataAdapter 方法成立五个 DbDataAdapter (第90行),然后使用
DbDataAdapter 类的 Fill 方法来填充 DataSet (第93行),最后回来该 DataSet
的 Tables 属性中的第壹个 DataTabe 的 DefaultView (第七四行)。

亚洲必赢官网 810 <appSettings>
亚洲必赢官网 811 <add
key=”DbHelperProvider” value=”System.Data.SqlClient”/>
亚洲必赢官网 812 <add
key=”DbHelperConnectionString” value=”Data Source=(local);Initial
Catalog=DbHelperTest;Persist Security Info=True;User
ID=sa;Password=sa”/>
亚洲必赢官网 813 </appSettings>

实质上,DbHelper必要的唯有是三个字符串,你能够团结修改,作成加密什么的…

一、达成Sql
Server的辅助类,具体方法:只要重写DbHelper类的DbProviderFactory属性并在构造函数为其赋值即可,别的的数据库帮忙类亦是那样,

该程序中的静态类 Pub 类提供一些声援的静态方法:

实在,DbHelper必要的单纯是七个字符串,你能够自个儿修改,作成加密什么的…
好了,仿佛此,DbHelper的代码是格外简单和透明的,只是在ado.net上做了一点小包装,改变了一下施用它的程序员的编码格局,去除掉一些比较”
物理级”的编制程序概念,如connection的open和close之类的,使程序员更注意于业务逻辑代码的编写制定,少死掉点脑细胞,此外,统一了数码操作层的数额操作代码的风格和格式,维护起来很有益的撒~~~
另:以上代码大家能够私自使用,
不须要给小编版权费的呐,嘿嘿.假诺我们发现有怎么样BUG,恐怕有更加好的多寡操作类的兑现格局,请联系本身哦.

好了,就这么,DbHelper的代码是非凡不难和晶莹剔透的,只是在ado.net上做了少数小包装,改变了弹指间使用它的程序员的编码形式,去除掉一些相比”物理级”的编制程序概念,如connection的open和close之类的,使程序员越来越小心于工作逻辑代码的编写,少死掉点脑细胞,别的,统一了数据操作层的多少操作代码的作风和格式,维护起来很有益于的撒~~~

代码如下:

using System;
using System.Text;
using System.Windows.Forms;
using System.Reflection;

namespace Skyiv.Ben.DbTools
{
  static class Pub
  {
    public static string GetMessage(Exception ex)
    {
      var sb = new StringBuilder();
      for (sb.Append("错误: "); ex != null; ex = ex.InnerException)
      {
        sb.AppendFormat("[{0}]: ", ex.GetType());
        sb.AppendLine(ex.Message);
      }
      return sb.ToString();
    }

    public static void AppendLine(this TextBoxBase tbx, string fmt, params object[] args)
    {
      tbx.AppendText(string.Format(fmt, args) + Environment.NewLine);
    }

    public static Version GetClientVersion(string name)
    {
      foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) if (name == a.GetName().Name) return a.GetName().Version;
      return null;
    }
  }
}

另:以上代码大家能够随便行使,
不必要给本身版权费的呀,嘿嘿.如若大家发现有啥样BUG,恐怕有越来越好的数目操作类的兑现格局,请联系自己哦.

    //用于Sql Server的帮助类
    public class SqlClientHelper : DbHelper
    {
        public SqlClientHelper(string connectionString) : base(connectionString)
        {
            this.DbProviderFactory = SqlClientFactory.Instance;
        }
        public override DbProviderFactory DbProviderFactory { get; }
    }

终极,完整的源程序能够到
页面下载。

2、参照以上,完毕SQLite帮忙类如下:

也能够选拔 hg clone 命令下载。

    //用于SQLite的帮助类
    public class SQLiteHelper : DbHelper
    {
        public SQLiteHelper(string connectionString) : base(connectionString)
        {
            DbProviderFactory = SQLiteFactory.Instance;
        }
        public override DbProviderFactory DbProviderFactory  { get; }
    }

关于 hg ,请参阅 Mercurial
备忘录。

三、别的数据库的支援类,正如以上所说的,只要重写DbHelper类的DbProviderFactory属性并在构造函数为其赋值即可。

四、示例演示

运用前,必须引用了System.Data.SQLite,具体请参考一下稿子:

使用C#创制SQLite控制台应用程序

编排的客户端代码,如下:

    class Program
    {
        //客户端调用
        static void Main(string[] args)
        {
            string fileName = "Test.db";
            if (File.Exists(fileName)) File.Delete(fileName);
            SQLiteConnection.CreateFile(fileName);
            SQLiteHelper helper = new SQLiteHelper($"Data Source = {fileName}");
            helper.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS Info(ID integer PRIMARY KEY AUTOINCREMENT, Guid text)");
            List<string> sqlList = new List<string>();
            for (int i = 0; i < 1000; i++)
            {
                sqlList.Add($"INSERT INTO Info VALUES(null,'{Guid.NewGuid()}')");
            }
            helper.ExecuteNonQuery(sqlList.ToArray());
            DataTable table = helper.Fill("SELECT * FROM Info");
            table.Rows.Cast<DataRow>().ToList().ForEach(x => Console.WriteLine($"{x[0]}\t{x[1]}"));
            Console.ReadKey();
        }
    }

出口的结果如下:

亚洲必赢官网 814

5、完整代码如下:

亚洲必赢官网 815亚洲必赢官网 816

using System;
using System.Linq;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.IO;

namespace ConsoleApp
{
    class Program
    {
        //客户端调用
        static void Main(string[] args)
        {
            string fileName = "Test.db";
            if (File.Exists(fileName)) File.Delete(fileName);
            SQLiteConnection.CreateFile(fileName);
            SQLiteHelper helper = new SQLiteHelper($"Data Source = {fileName}");
            helper.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS Info(ID integer PRIMARY KEY AUTOINCREMENT, Guid text)");
            List<string> sqlList = new List<string>();
            for (int i = 0; i < 1000; i++)
            {
                sqlList.Add($"INSERT INTO Info VALUES(null,'{Guid.NewGuid()}')");
            }
            helper.ExecuteNonQuery(sqlList.ToArray());
            DataTable table = helper.Fill("SELECT * FROM Info");
            table.Rows.Cast<DataRow>().ToList().ForEach(x => Console.WriteLine($"{x[0]}\t{x[1]}"));
            Console.ReadKey();
        }
    }

    //用于Sql Server的帮助类
    public class SqlClientHelper : DbHelper
    {
        public SqlClientHelper(string connectionString) : base(connectionString)
        {
            this.DbProviderFactory = SqlClientFactory.Instance;
        }
        public override DbProviderFactory DbProviderFactory { get; }
    }

    //用于SQLite的帮助类
    public class SQLiteHelper : DbHelper
    {
        public SQLiteHelper(string connectionString) : base(connectionString)
        {
            DbProviderFactory = SQLiteFactory.Instance;
        }
        public override DbProviderFactory DbProviderFactory  { get; }
    }

    //--------------------------------------------------------------------------------
    //其他数据库的帮助类,只要重写DbHelper类的DbProviderFactory属性并在构造函数为其赋值即可
    //--------------------------------------------------------------------------------

    //帮助类的基类(抽象类)
    public abstract class DbHelper
    {
        public DbHelper(string connectionString)
        {
            ConnectionString = connectionString;
        }

        public abstract DbProviderFactory DbProviderFactory {  get; } 

        public string ConnectionString { get; }

        //以下实现的帮助类方法,仅供该例子使用,具体请参照其他完整的DbHelp帮助类
        private void ThrowExceptionIfLengthNotEqual(string[] sqls, params DbParameter[][] parameters)
        {
            if (parameters.GetLength(0) != 0 && sqls.Length != parameters.GetLength(0)) throw new ArgumentException($"一维数组{nameof(sqls)}的长度与二维数组{nameof(parameters)}长度的第一维长度不一致");
        }

        private T[] Execute<T>(string[] sqls, CommandType commandType = CommandType.Text, ExecuteMode executeMode = ExecuteMode.NonQuery, params DbParameter[][] parameters)
        {
            ThrowExceptionIfLengthNotEqual(sqls, parameters);
            if(executeMode == ExecuteMode.NonQuery && typeof(T) != typeof(int)) throw new InvalidCastException("使用NonQuery模式时,必须将类型T指定为int");
            using (DbConnection connection = DbProviderFactory.CreateConnection())
            using (DbCommand command = DbProviderFactory.CreateCommand())
            {
                connection.ConnectionString = ConnectionString;
                connection.Open();
                command.Connection = connection;
                command.CommandType = commandType;
                DbTransaction transaction = connection.BeginTransaction();
                command.Transaction = transaction;
                try
                {
                    List<T> resultList = new List<T>();
                    for (int i = 0; i < sqls.Length; i++)
                    {
                        command.CommandText = sqls[i];
                        if (parameters.GetLength(0) != 0)
                        {
                            command.Parameters.Clear();
                            command.Parameters.AddRange(parameters[i]);
                        }
                        object result = null;
                        switch (executeMode)
                        {
                            case ExecuteMode.NonQuery:
                                result = command.ExecuteNonQuery(); break;
                            case ExecuteMode.Scalar:
                                result = command.ExecuteScalar(); break;
                            default: throw new NotImplementedException();
                        }
                        resultList.Add((T)Convert.ChangeType(result, typeof(T)));
                    }
                    transaction.Commit();
                    return resultList.ToArray();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }

        public int ExecuteNonQuery(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];

        public int[] ExecuteNonQuery(string[] sqls, params DbParameter[][] parameters)=> Execute<int>(sqls, CommandType.Text, ExecuteMode.NonQuery,parameters);

        public int ExecuteNonQueryWithProc(string sql, params DbParameter[] parameter) => ExecuteNonQueryWithProc(new string[] { sql },  new DbParameter[][] { parameter })[0];

        public int[] ExecuteNonQueryWithProc(string[] sqls, params DbParameter[][] parameters) => Execute<int>(sqls, CommandType.StoredProcedure, ExecuteMode.NonQuery, parameters);

        public T ExecuteScalar<T>(string sql, params DbParameter[] parameter) => ExecuteNonQuery<T>(new string[] { sql }, new DbParameter[][] { parameter })[0];

        public T[] ExecuteNonQuery<T>(string[] sqls, params DbParameter[][] parameters) => Execute<T>(sqls, CommandType.Text,ExecuteMode.Scalar, parameters);

        public T ExecuteScalarWithProc<T>(string sql, params DbParameter[] parameter) => ExecuteNonQuery<T>(new string[] { sql }, new DbParameter[][] { parameter })[0];

        public T[] ExecuteNonQueryWithProc<T>(string[] sqls, params DbParameter[][] parameters) => Execute<T>(sqls, CommandType.StoredProcedure, ExecuteMode.Scalar, parameters);

        enum ExecuteMode
        {
            NonQuery,Scalar
        }

        private DataTable[] Fill(string[] selectSqls, CommandType commandType = CommandType.Text, params DbParameter[][] parameters)
        {
            ThrowExceptionIfLengthNotEqual(selectSqls, parameters);
            using (DbConnection connection = DbProviderFactory.CreateConnection())
            using (DbDataAdapter adapter = DbProviderFactory.CreateDataAdapter())
            using (DbCommand command = DbProviderFactory.CreateCommand())
            {
                connection.ConnectionString = ConnectionString;
                connection.Open();
                command.Connection = connection;
                command.CommandType = commandType;
                adapter.SelectCommand = command;
                List<DataTable> resultList = new List<DataTable>();
                for (int i = 0; i < selectSqls.Length; i++)
                {
                    command.CommandText = selectSqls[i];
                    if (parameters.GetLength(0) != 0)
                    {
                        command.Parameters.Clear();
                        command.Parameters.AddRange(parameters[i]);
                    }
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    resultList.Add(table);
                }
                return resultList.ToArray();
            }
        }

        public DataTable Fill(string selectSql, params DbParameter[] parameter) => Fill(new string[] { selectSql }, new DbParameter[][] { parameter })[0];

        public DataTable[] Fill(string[] selectSqls, params DbParameter[][] parameters) => Fill(selectSqls, CommandType.Text, parameters);

        public DataTable FillWithProc(string selectSql, params DbParameter[] parameter) => FillWithProc(new string[] { selectSql }, new DbParameter[][] { parameter })[0];

        public DataTable[] FillWithProc(string[] selectSqls, params DbParameter[][] parameters) => Fill(selectSqls, CommandType.StoredProcedure, parameters);
    }
}

View Code

 

网站地图xml地图