DbHelper通用數據庫訪問幫助類


     之前我一直都是在博客園中查看各位高手的博文,確實學到了不少知識,不過比較少寫博客,現在就把我自己在項目實施過程中使用到比較好的技術框架寫出來,希望能讓更多的人了解和學習。

     通常我們在開發使用數據庫訪問幫助類時,都單獨的針對某一種數據進行編寫相應的數據訪問幫助類,如SQLHelper,OracleHelper,OleDbHelper等,其實這些都幫助類的實現都是繼承並實現ADO.NET中的數據庫訪問基類的,如SQLCommand->DbCommand,SQLConnection->DbConnection等,在未優化數據訪問層之前,通常的框架結構如下所示:

其實我們現在可以將SQLServer,Oracle等的數據訪問模塊進行優化,將其合並為一個通用的DbHelper數據訪問類,優化后的訪問框架如下:

這樣在使用數據訪問時就可以直接使用DbHeper幫助類,這跟使用哪種數據庫無任何關系,也就是說在更換數據庫時,不需要侯任何現有的數據訪問邏輯代碼,這對我們的系統維護起到了很大的作用,在更換數據庫時,只需簡單的配置一下所使用的數據庫提供程序,如下所示:

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

為了滿足這一通用的數據訪問操作,我編寫了一個DbHelper.cs類庫,歡迎大家下載使用,希望可以幫助大家在數據庫訪問操作上更加方便、快捷,

具體的通用數據庫訪問幫助類代碼如下所示:

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

在這些代碼中,可以滿足大多數的數據訪問操作,如果需要自己還可以再繼續擴展的,也歡迎大家指出其中存在的不足之處,謝謝。 

歡迎大家進行轉載,謝謝大家的光臨!

2012-06-14 23:46:54

 

補充說明:

今天我看到很多朋友們提出了不少不同的意見,你們都說得很對,在此非常感謝,本文只是說明這個是.net中算是比較通用的數據庫訪問輔助類而已,但很多朋友誤以為是數據庫訪問的框架,跟ORM相提並論了,這根本談不上是什么數據訪問框架的。其實ORM也是對ADO.NET進行映射和封裝的,自動幫我們生成了相應的CRUD操作,省去了寫SQL的時間,確實對我們的開發省了不少工作,本文的幫助類對原生的ADO.NET訪問操作起到較為方便和易用的作用,這跟ORM相比,直接用ADO.NET訪問數據庫操作在性能上應該說更好一些吧,不管怎么樣,對於技術,至少要了解和追求深一些吧。

2012-06-15 23:25:59

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM