威尼斯人线上娱乐

【威尼斯人线上娱乐】兑现任何数据库类型的DbHelper辅助类,数据库小工具整合版

10 4月 , 2019  

本小说为原创内容,如需转发,请申明小编及出处,谢谢!

自家在200五年5月13日写的1篇文章“数据库小工具(C#)”中提到:

 

      其实,微软的公司库中有多个要命科学的数额操作类了.但是,不少商行(起码笔者遇上的多少个…),对一些”封装”了些什么的事物不太敢用,纵然自身推荐过微软的集团库框架了…可是还是要”评估”…壹评就是多少个月…而且,一些商家部分根本便是裸ado.net开发,只怕自身包装的数据库操作类万分别扭,很不佳用.
      那里笔者给我们共享八个自小编参考集团库中的数据操作组件编码风格写的数据库操作类,对采取它的程序员来说,编码是很舒服滴(起码作者觉得很好撒).以下是代码,很不难的,未有做别的多余的包装,只是改变了ADO.NET的编码步骤,方便了切实花费数据库操作代码的程序员.


在编写有关数据库方面包车型客车C#次第时,平日需求明白数据库的表中各字段的以下消息:
一.
用来OracleParameter(或SqlParameter,…)中的字段和质量的数据库特定的数据类型。

实在,微软的集团库中有2个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            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【威尼斯人线上娱乐】兑现任何数据库类型的DbHelper辅助类,数据库小工具整合版。            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/3的数据库操作须要了.
一)直接执行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,DbDataAdapter等。

威尼斯人线上娱乐 629

2)执行存款和储蓄进度

威尼斯人线上娱乐 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、SqlData艾达pter(那里用的是SQL
Server)的项目,都各自继承自DbConnection,DbCommand,DbDataAdapter,

从上海教室中得以看来 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

1、大家将DbHelper定义为抽象类,并在类中提供贰个虚无可读属性,名称为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)输入参数/输出参数/重回值的行使(相比较根本哦)

威尼斯人线上娱乐 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使用

叁、大家为该抽象类编写三个构造函数,传进去的参数为再三再四字符串,并将其储存在可读的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 方法(第二陆到3贰行)中行使 DbProviderFactories 的静态方法
GetFactoryClasses 获得在本机中达成 DbProviderFactories
的具备已安装提供程序的新闻(第二二行),然后再将其绑定到程序主界面包车型地铁 ListBox(第14行) 和 DataGridView (第一五行) 控件上。那样,那三个控件就会联合浮动了。

威尼斯人线上娱乐 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)事务的使用.(项目中需求将挑彭城的数据库操作组合成1个完好无缺的作业流时,代码级的业务是必备的哦)

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

点击“执行”按钮,就会调用 btnSubmit_Click 方法(第14到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 (第50行)。
  • 动用 DbProviderFactory 类的 CreateConnection 方法创制三个DbConnection (第伍1行)。
  • 利用 DbConnection 类的 Open 方法打开数据库连接(第四四行)。
  • 行使 DbConnection 类的 CreateCommand 方法创制1个 DbCommand
    (第40行)。
  • 假如要执行的 SQL 语句不是 SELECT 语句,则调用 DbCommand 类的
    ExecuteNonQuery 方法执行该 SQL 语句(第肆4行)。
  • 不然,若是程序主界面中的“结构”复选框被选中,就调用
    RunQueryTableStruct 方法取得数据库中的表的结构(第陆5行)。
  • 要不,就调用 RunQueryTableData 方法取得数据库中的表的多少(第5陆行)。

威尼斯人线上娱乐 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);
    }

第玖0到7六行的 RunQueryTableStruct 方法应用 DbCommand 类的 ExecuteReader
方法(使用 CommandBehavior.KeyInfo 参数)获得二个 DbDataReader
(第10贰行),然后调用 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到⑧5行的 RunQueryTableData 方法应用 DbProviderFactory 类的
CreateDataAdapter 方法创设三个 DbDataAdapter (第90行),然后使用
DbDataAdapter 类的 Fill 方法来填充 DataSet (第十三行),最终回到该 DataSet
的 Tables 属性中的第3个 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须要的1味是五个字符串,你能够团结修改,作成加密什么的…
好了,就像是此,DbHelper的代码是卓殊简单和透明的,只是在ado.net上做了好几小包装,改变了弹指间应用它的程序员的编码情势,去除掉壹些相比较”
物理级”的编制程序概念,如connection的open和close之类的,使程序员更注意于业务逻辑代码的编纂,少死掉点脑细胞,其它,统一了数额操作层的数量操作代码的作风和格式,维护起来很便宜的撒~~~
另:以上代码大家能够自由使用,
不须求给本人版权费的啊,嘿嘿.假如大家发现有怎样BUG,恐怕有越来越好的数额操作类的达成方式,请联系本人哦.

好了,就这么,DbHelper的代码是十分简单和晶莹剔透的,只是在ado.net上做了1些小包装,改变了瞬间行使它的程序员的编码格局,去除掉1些比较”物理级”的编制程序概念,如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; }
    }

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

二、参照以上,完毕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

伍、完整代码如下:

威尼斯人线上娱乐 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地图