當(dāng)前位置:
首頁 >
DbHelper数据操作类,DbProviderFactories
發(fā)布時(shí)間:2025/7/14
43
豆豆
生活随笔
收集整理的這篇文章主要介紹了
DbHelper数据操作类,DbProviderFactories
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
其實(shí),微軟的企業(yè)庫中有一個(gè)非常不錯(cuò)的數(shù)據(jù)操作類了.但是,不少公司(起碼我遇到的幾個(gè)...),對(duì)一些"封裝"了些什么的東西不太敢用,雖然我推薦過微軟的企業(yè)庫框架了...但是還是要"評(píng)估"...一評(píng)就是幾個(gè)月...而且,一些公司有的根本就是裸ado.net開發(fā),或者自己封裝的數(shù)據(jù)庫操作類非常別扭,很不好用.
??????這里我給大家共享一個(gè)我參照企業(yè)庫中的數(shù)據(jù)操作組件編碼風(fēng)格寫的數(shù)據(jù)庫操作類,對(duì)使用它的程序員來說,編碼是很舒服滴(起碼我覺得很好撒).以下是代碼,很簡(jiǎn)單的,沒有做任何多余的封裝,只是改變了ADO.NET的編碼步驟,方便了具體開發(fā)數(shù)據(jù)庫操作代碼的程序員. ????using?System;
????using?System.Data;
????using?System.Data.Common;
????using?System.Configuration;
????public?class?DbHelper
????{
????????private?static?string?dbProviderName?=?ConfigurationManager.AppSettings["DbHelperProvider"];
????????private?static?string?dbConnectionString?=?ConfigurationManager.AppSettings["DbHelperConnectionString"];
????????private?DbConnection?connection;
????????public?DbHelper()
????????{
????????????this.connection?=?CreateConnection(DbHelper.dbConnectionString);
????????}
????????public?DbHelper(string?connectionString)
????????{
????????????this.connection?=?CreateConnection(connectionString);
????????}
????????public?static?DbConnection?CreateConnection()
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbConnection?dbconn?=?dbfactory.CreateConnection();
????????????dbconn.ConnectionString?=?DbHelper.dbConnectionString;
????????????return?dbconn;
????????}
????????public?static?DbConnection?CreateConnection(string?connectionString)
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbConnection?dbconn?=?dbfactory.CreateConnection();
????????????dbconn.ConnectionString?=?connectionString;
????????????return?dbconn;
????????}
????????public?DbCommand?GetStoredProcCommond(string?storedProcedure)
????????{
????????????DbCommand?dbCommand?=?connection.CreateCommand();
????????????dbCommand.CommandText?=?storedProcedure;
????????????dbCommand.CommandType?=?CommandType.StoredProcedure;
????????????return?dbCommand;
????????}
????????public?DbCommand?GetSqlStringCommond(string?sqlQuery)
????????{
????????????DbCommand?dbCommand?=?connection.CreateCommand();
????????????dbCommand.CommandText?=?sqlQuery;
????????????dbCommand.CommandType?=?CommandType.Text;
????????????return?dbCommand;
????????}
????????增加參數(shù)#region?增加參數(shù)
????????public?void?AddParameterCollection(DbCommand?cmd,?DbParameterCollection?dbParameterCollection)
????????{
????????????foreach?(DbParameter?dbParameter?in?dbParameterCollection)
????????????{
????????????????cmd.Parameters.Add(dbParameter);
????????????}
????????}
????????public?void?AddOutParameter(DbCommand?cmd,?string?parameterName,?DbType?dbType,?int?size)
????????{
????????????DbParameter?dbParameter?=?cmd.CreateParameter();
????????????dbParameter.DbType?=?dbType;
????????????dbParameter.ParameterName?=?parameterName;
????????????dbParameter.Size?=?size;
????????????dbParameter.Direction?=?ParameterDirection.Output;
????????????cmd.Parameters.Add(dbParameter);
????????}
????????public?void?AddInParameter(DbCommand?cmd,?string?parameterName,?DbType?dbType,?object?value)
????????{
????????????DbParameter?dbParameter?=?cmd.CreateParameter();
????????????dbParameter.DbType?=?dbType;
????????????dbParameter.ParameterName?=?parameterName;
????????????dbParameter.Value?=?value;
????????????dbParameter.Direction?=?ParameterDirection.Input;
????????????cmd.Parameters.Add(dbParameter);
????????}
????????public?void?AddReturnParameter(DbCommand?cmd,?string?parameterName,?DbType?dbType)
????????{
????????????DbParameter?dbParameter?=?cmd.CreateParameter();
????????????dbParameter.DbType?=?dbType;
????????????dbParameter.ParameterName?=?parameterName;
????????????dbParameter.Direction?=?ParameterDirection.ReturnValue;
????????????cmd.Parameters.Add(dbParameter);
????????}
????????public?DbParameter?GetParameter(DbCommand?cmd,?string?parameterName)
????????{
????????????return?cmd.Parameters[parameterName];
????????}
????????#endregion
????????執(zhí)行#region?執(zhí)行
????????public?DataSet?ExecuteDataSet(DbCommand?cmd)
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataSet?ds?=?new?DataSet();
????????????dbDataAdapter.Fill(ds);
????????????return?ds;
????????}
????????public?DataTable?ExecuteDataTable(DbCommand?cmd)
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataTable?dataTable?=?new?DataTable();
????????????dbDataAdapter.Fill(dataTable);
????????????return?dataTable;
????????}
????????public?DbDataReader?ExecuteReader(DbCommand?cmd)
????????{
????????????cmd.Connection.Open();
????????????DbDataReader?reader?=?cmd.ExecuteReader(CommandBehavior.CloseConnection);????????????
????????????return?reader;
????????}
????????public?int?ExecuteNonQuery(DbCommand?cmd)
????????{
????????????cmd.Connection.Open();
????????????int?ret?=?cmd.ExecuteNonQuery();
????????????cmd.Connection.Close();
????????????return?ret;
????????}
????????public?object?ExecuteScalar(DbCommand?cmd)
????????{
????????????cmd.Connection.Open();
????????????object?ret?=?cmd.ExecuteScalar();
????????????cmd.Connection.Close();
????????????return?ret;
????????}
????????#endregion????????
????????執(zhí)行事務(wù)#region?執(zhí)行事務(wù)
????????public?DataSet?ExecuteDataSet(DbCommand?cmd,Trans?t)
????????{
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataSet?ds?=?new?DataSet();
????????????dbDataAdapter.Fill(ds);
????????????return?ds;
????????}
????????public?DataTable?ExecuteDataTable(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataTable?dataTable?=?new?DataTable();
????????????dbDataAdapter.Fill(dataTable);
????????????return?dataTable;
????????}
????????public?DbDataReader?ExecuteReader(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection.Close();
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;????????????
????????????DbDataReader?reader?=?cmd.ExecuteReader();
????????????DataTable?dt?=?new?DataTable();????????????
????????????return?reader;
????????}
????????public?int?ExecuteNonQuery(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection.Close();
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;??
????????????int?ret?=?cmd.ExecuteNonQuery();????????????
????????????return?ret;
????????}
????????public?object?ExecuteScalar(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection.Close();
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;??
????????????object?ret?=?cmd.ExecuteScalar();????????????
????????????return?ret;
????????}
????????#endregion
????}
????public?class?Trans?:?IDisposable
????{
????????private?DbConnection?conn;
????????private?DbTransaction?dbTrans;
????????public?DbConnection?DbConnection
????????{
????????????get?{?return?this.conn;?}
????????}
????????public?DbTransaction?DbTrans
????????{
????????????get?{?return?this.dbTrans;?}
????????}
????????public?Trans()
????????{
????????????conn?=?DbHelper.CreateConnection();
????????????conn.Open();
????????????dbTrans?=?conn.BeginTransaction();
????????}
????????public?Trans(string?connectionString)
????????{
????????????conn?=?DbHelper.CreateConnection(connectionString);
????????????conn.Open();
????????????dbTrans?=?conn.BeginTransaction();
????????}
????????public?void?Commit()
????????{
????????????dbTrans.Commit();
????????????this.Colse();
????????}
????????public?void?RollBack()
????????{
????????????dbTrans.Rollback();
????????????this.Colse();
????????}
????????public?void?Dispose()
????????{
????????????this.Colse();
????????}
????????public?void?Colse()
????????{
????????????if?(conn.State?==?System.Data.ConnectionState.Open)
????????????{
????????????????conn.Close();
????????????}
????????}
????} 那么如何使用它呢?下面我給出一些基本的使用示例,基本能滿足你大部分的數(shù)據(jù)庫操作需要了.
1)直接執(zhí)行sql語句 ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("insert?t1?(id)values('haha')");
????????db.ExecuteNonQuery(cmd); 2)執(zhí)行存儲(chǔ)過程 ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t1_insert");
????????db.AddInParameter(cmd,?"@id",?DbType.String,?"heihei");
????????db.ExecuteNonQuery(cmd); 3)返回DataSet ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("select?*?from?t1");
????????DataSet?ds?=?db.ExecuteDataSet(cmd); 4)返回DataTable
? ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("t1_findall");
????????DataTable?dt?=?db.ExecuteDataTable(cmd); 5)輸入?yún)?shù)/輸出參數(shù)/返回值的使用(比較重要哦) ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t2_insert");
????????db.AddInParameter(cmd,?"@timeticks",?DbType.Int64,?DateTime.Now.Ticks);
????????db.AddOutParameter(cmd,?"@outString",?DbType.String,?20);
????????db.AddReturnParameter(cmd,?"@returnValue",?DbType.Int32);
????????db.ExecuteNonQuery(cmd);
????????string?s?=?db.GetParameter(cmd,?"@outString").Value?as?string;//out?parameter
????????int?r?=?Convert.ToInt32(db.GetParameter(cmd,?"@returnValue").Value);//return?value
6)DataReader使用 ??????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t2_insert");
????????db.AddInParameter(cmd,?"@timeticks",?DbType.Int64,?DateTime.Now.Ticks);
????????db.AddOutParameter(cmd,?"@outString",?DbType.String,?20);
????????db.AddReturnParameter(cmd,?"@returnValue",?DbType.Int32);
????????using?(DbDataReader?reader?=?db.ExecuteReader(cmd))
????????{
????????????dt.Load(reader);
????????}????????
????????string?s?=?db.GetParameter(cmd,?"@outString").Value?as?string;//out?parameter
????????int?r?=?Convert.ToInt32(db.GetParameter(cmd,?"@returnValue").Value);//return?value
7)事務(wù)的使用.(項(xiàng)目中需要將基本的數(shù)據(jù)庫操作組合成一個(gè)完整的業(yè)務(wù)流時(shí),代碼級(jí)的事務(wù)是必不可少的哦)
以上我們好像沒有指定數(shù)據(jù)庫連接字符串,大家如果看下DbHelper的代碼,就知道要使用它必須在config中配置兩個(gè)參數(shù),如下:
? ????pubic?void?DoBusiness()
????{
????????using?(Trans?t?=?new?Trans())
????????{
????????????try
????????????{
????????????????D1(t);
????????????????throw?new?Exception();//如果有異常,會(huì)回滾滴
????????????????D2(t);
????????????????t.Commit();
????????????}
????????????catch
????????????{
????????????????t.RollBack();
????????????}
????????}
????}
????public?void?D1(Trans?t)
????{
????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t2_insert");
????????db.AddInParameter(cmd,?"@timeticks",?DbType.Int64,?DateTime.Now.Ticks);
????????db.AddOutParameter(cmd,?"@outString",?DbType.String,?20);
????????db.AddReturnParameter(cmd,?"@returnValue",?DbType.Int32);
????????if?(t?==?null)?db.ExecuteNonQuery(cmd);
????????else?db.ExecuteNonQuery(cmd,t);
????????string?s?=?db.GetParameter(cmd,?"@outString").Value?as?string;//out?parameter
????????int?r?=?Convert.ToInt32(db.GetParameter(cmd,?"@returnValue").Value);//return?value
????}
????public?void?D2(Trans?t)
????{
????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("insert?t1?(id)values('..')");????????
????????if?(t?==?null)?db.ExecuteNonQuery(cmd);
????????else?db.ExecuteNonQuery(cmd,?t);
????} ????<appSettings>
????????<add?key="DbHelperProvider"?value="System.Data.SqlClient"/>
????????<add?key="DbHelperConnectionString"?value="Data?Source=(local);Initial?Catalog=DbHelperTest;Persist?Security?Info=True;User?ID=sa;Password=sa"/>
????appSettings> 其實(shí),DbHelper需要的僅僅是兩個(gè)字符串,你可以自己修改,作成加密什么的...
好了,就這樣,DbHelper的代碼是非常簡(jiǎn)單和透明的,只是在ado.net上做了一點(diǎn)小包裝,改變了一下使用它的程序員的編碼方式,去除掉一些比較"物理級(jí)"的編程概念,如connection的open和close之類的,使程序員更專注于業(yè)務(wù)邏輯代碼的編寫,少死掉點(diǎn)腦細(xì)胞,另外,統(tǒng)一了數(shù)據(jù)操作層的數(shù)據(jù)操作代碼的風(fēng)格和格式,維護(hù)起來很方便的撒~~~
?
??????這里我給大家共享一個(gè)我參照企業(yè)庫中的數(shù)據(jù)操作組件編碼風(fēng)格寫的數(shù)據(jù)庫操作類,對(duì)使用它的程序員來說,編碼是很舒服滴(起碼我覺得很好撒).以下是代碼,很簡(jiǎn)單的,沒有做任何多余的封裝,只是改變了ADO.NET的編碼步驟,方便了具體開發(fā)數(shù)據(jù)庫操作代碼的程序員. ????using?System;
????using?System.Data;
????using?System.Data.Common;
????using?System.Configuration;
????public?class?DbHelper
????{
????????private?static?string?dbProviderName?=?ConfigurationManager.AppSettings["DbHelperProvider"];
????????private?static?string?dbConnectionString?=?ConfigurationManager.AppSettings["DbHelperConnectionString"];
????????private?DbConnection?connection;
????????public?DbHelper()
????????{
????????????this.connection?=?CreateConnection(DbHelper.dbConnectionString);
????????}
????????public?DbHelper(string?connectionString)
????????{
????????????this.connection?=?CreateConnection(connectionString);
????????}
????????public?static?DbConnection?CreateConnection()
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbConnection?dbconn?=?dbfactory.CreateConnection();
????????????dbconn.ConnectionString?=?DbHelper.dbConnectionString;
????????????return?dbconn;
????????}
????????public?static?DbConnection?CreateConnection(string?connectionString)
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbConnection?dbconn?=?dbfactory.CreateConnection();
????????????dbconn.ConnectionString?=?connectionString;
????????????return?dbconn;
????????}
????????public?DbCommand?GetStoredProcCommond(string?storedProcedure)
????????{
????????????DbCommand?dbCommand?=?connection.CreateCommand();
????????????dbCommand.CommandText?=?storedProcedure;
????????????dbCommand.CommandType?=?CommandType.StoredProcedure;
????????????return?dbCommand;
????????}
????????public?DbCommand?GetSqlStringCommond(string?sqlQuery)
????????{
????????????DbCommand?dbCommand?=?connection.CreateCommand();
????????????dbCommand.CommandText?=?sqlQuery;
????????????dbCommand.CommandType?=?CommandType.Text;
????????????return?dbCommand;
????????}
????????增加參數(shù)#region?增加參數(shù)
????????public?void?AddParameterCollection(DbCommand?cmd,?DbParameterCollection?dbParameterCollection)
????????{
????????????foreach?(DbParameter?dbParameter?in?dbParameterCollection)
????????????{
????????????????cmd.Parameters.Add(dbParameter);
????????????}
????????}
????????public?void?AddOutParameter(DbCommand?cmd,?string?parameterName,?DbType?dbType,?int?size)
????????{
????????????DbParameter?dbParameter?=?cmd.CreateParameter();
????????????dbParameter.DbType?=?dbType;
????????????dbParameter.ParameterName?=?parameterName;
????????????dbParameter.Size?=?size;
????????????dbParameter.Direction?=?ParameterDirection.Output;
????????????cmd.Parameters.Add(dbParameter);
????????}
????????public?void?AddInParameter(DbCommand?cmd,?string?parameterName,?DbType?dbType,?object?value)
????????{
????????????DbParameter?dbParameter?=?cmd.CreateParameter();
????????????dbParameter.DbType?=?dbType;
????????????dbParameter.ParameterName?=?parameterName;
????????????dbParameter.Value?=?value;
????????????dbParameter.Direction?=?ParameterDirection.Input;
????????????cmd.Parameters.Add(dbParameter);
????????}
????????public?void?AddReturnParameter(DbCommand?cmd,?string?parameterName,?DbType?dbType)
????????{
????????????DbParameter?dbParameter?=?cmd.CreateParameter();
????????????dbParameter.DbType?=?dbType;
????????????dbParameter.ParameterName?=?parameterName;
????????????dbParameter.Direction?=?ParameterDirection.ReturnValue;
????????????cmd.Parameters.Add(dbParameter);
????????}
????????public?DbParameter?GetParameter(DbCommand?cmd,?string?parameterName)
????????{
????????????return?cmd.Parameters[parameterName];
????????}
????????#endregion
????????執(zhí)行#region?執(zhí)行
????????public?DataSet?ExecuteDataSet(DbCommand?cmd)
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataSet?ds?=?new?DataSet();
????????????dbDataAdapter.Fill(ds);
????????????return?ds;
????????}
????????public?DataTable?ExecuteDataTable(DbCommand?cmd)
????????{
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataTable?dataTable?=?new?DataTable();
????????????dbDataAdapter.Fill(dataTable);
????????????return?dataTable;
????????}
????????public?DbDataReader?ExecuteReader(DbCommand?cmd)
????????{
????????????cmd.Connection.Open();
????????????DbDataReader?reader?=?cmd.ExecuteReader(CommandBehavior.CloseConnection);????????????
????????????return?reader;
????????}
????????public?int?ExecuteNonQuery(DbCommand?cmd)
????????{
????????????cmd.Connection.Open();
????????????int?ret?=?cmd.ExecuteNonQuery();
????????????cmd.Connection.Close();
????????????return?ret;
????????}
????????public?object?ExecuteScalar(DbCommand?cmd)
????????{
????????????cmd.Connection.Open();
????????????object?ret?=?cmd.ExecuteScalar();
????????????cmd.Connection.Close();
????????????return?ret;
????????}
????????#endregion????????
????????執(zhí)行事務(wù)#region?執(zhí)行事務(wù)
????????public?DataSet?ExecuteDataSet(DbCommand?cmd,Trans?t)
????????{
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataSet?ds?=?new?DataSet();
????????????dbDataAdapter.Fill(ds);
????????????return?ds;
????????}
????????public?DataTable?ExecuteDataTable(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;
????????????DbProviderFactory?dbfactory?=?DbProviderFactories.GetFactory(DbHelper.dbProviderName);
????????????DbDataAdapter?dbDataAdapter?=?dbfactory.CreateDataAdapter();
????????????dbDataAdapter.SelectCommand?=?cmd;
????????????DataTable?dataTable?=?new?DataTable();
????????????dbDataAdapter.Fill(dataTable);
????????????return?dataTable;
????????}
????????public?DbDataReader?ExecuteReader(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection.Close();
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;????????????
????????????DbDataReader?reader?=?cmd.ExecuteReader();
????????????DataTable?dt?=?new?DataTable();????????????
????????????return?reader;
????????}
????????public?int?ExecuteNonQuery(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection.Close();
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;??
????????????int?ret?=?cmd.ExecuteNonQuery();????????????
????????????return?ret;
????????}
????????public?object?ExecuteScalar(DbCommand?cmd,?Trans?t)
????????{
????????????cmd.Connection.Close();
????????????cmd.Connection?=?t.DbConnection;
????????????cmd.Transaction?=?t.DbTrans;??
????????????object?ret?=?cmd.ExecuteScalar();????????????
????????????return?ret;
????????}
????????#endregion
????}
????public?class?Trans?:?IDisposable
????{
????????private?DbConnection?conn;
????????private?DbTransaction?dbTrans;
????????public?DbConnection?DbConnection
????????{
????????????get?{?return?this.conn;?}
????????}
????????public?DbTransaction?DbTrans
????????{
????????????get?{?return?this.dbTrans;?}
????????}
????????public?Trans()
????????{
????????????conn?=?DbHelper.CreateConnection();
????????????conn.Open();
????????????dbTrans?=?conn.BeginTransaction();
????????}
????????public?Trans(string?connectionString)
????????{
????????????conn?=?DbHelper.CreateConnection(connectionString);
????????????conn.Open();
????????????dbTrans?=?conn.BeginTransaction();
????????}
????????public?void?Commit()
????????{
????????????dbTrans.Commit();
????????????this.Colse();
????????}
????????public?void?RollBack()
????????{
????????????dbTrans.Rollback();
????????????this.Colse();
????????}
????????public?void?Dispose()
????????{
????????????this.Colse();
????????}
????????public?void?Colse()
????????{
????????????if?(conn.State?==?System.Data.ConnectionState.Open)
????????????{
????????????????conn.Close();
????????????}
????????}
????} 那么如何使用它呢?下面我給出一些基本的使用示例,基本能滿足你大部分的數(shù)據(jù)庫操作需要了.
1)直接執(zhí)行sql語句 ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("insert?t1?(id)values('haha')");
????????db.ExecuteNonQuery(cmd); 2)執(zhí)行存儲(chǔ)過程 ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t1_insert");
????????db.AddInParameter(cmd,?"@id",?DbType.String,?"heihei");
????????db.ExecuteNonQuery(cmd); 3)返回DataSet ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("select?*?from?t1");
????????DataSet?ds?=?db.ExecuteDataSet(cmd); 4)返回DataTable
? ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("t1_findall");
????????DataTable?dt?=?db.ExecuteDataTable(cmd); 5)輸入?yún)?shù)/輸出參數(shù)/返回值的使用(比較重要哦) ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t2_insert");
????????db.AddInParameter(cmd,?"@timeticks",?DbType.Int64,?DateTime.Now.Ticks);
????????db.AddOutParameter(cmd,?"@outString",?DbType.String,?20);
????????db.AddReturnParameter(cmd,?"@returnValue",?DbType.Int32);
????????db.ExecuteNonQuery(cmd);
????????string?s?=?db.GetParameter(cmd,?"@outString").Value?as?string;//out?parameter
????????int?r?=?Convert.ToInt32(db.GetParameter(cmd,?"@returnValue").Value);//return?value
6)DataReader使用 ??????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t2_insert");
????????db.AddInParameter(cmd,?"@timeticks",?DbType.Int64,?DateTime.Now.Ticks);
????????db.AddOutParameter(cmd,?"@outString",?DbType.String,?20);
????????db.AddReturnParameter(cmd,?"@returnValue",?DbType.Int32);
????????using?(DbDataReader?reader?=?db.ExecuteReader(cmd))
????????{
????????????dt.Load(reader);
????????}????????
????????string?s?=?db.GetParameter(cmd,?"@outString").Value?as?string;//out?parameter
????????int?r?=?Convert.ToInt32(db.GetParameter(cmd,?"@returnValue").Value);//return?value
7)事務(wù)的使用.(項(xiàng)目中需要將基本的數(shù)據(jù)庫操作組合成一個(gè)完整的業(yè)務(wù)流時(shí),代碼級(jí)的事務(wù)是必不可少的哦)
以上我們好像沒有指定數(shù)據(jù)庫連接字符串,大家如果看下DbHelper的代碼,就知道要使用它必須在config中配置兩個(gè)參數(shù),如下:
? ????pubic?void?DoBusiness()
????{
????????using?(Trans?t?=?new?Trans())
????????{
????????????try
????????????{
????????????????D1(t);
????????????????throw?new?Exception();//如果有異常,會(huì)回滾滴
????????????????D2(t);
????????????????t.Commit();
????????????}
????????????catch
????????????{
????????????????t.RollBack();
????????????}
????????}
????}
????public?void?D1(Trans?t)
????{
????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetStoredProcCommond("t2_insert");
????????db.AddInParameter(cmd,?"@timeticks",?DbType.Int64,?DateTime.Now.Ticks);
????????db.AddOutParameter(cmd,?"@outString",?DbType.String,?20);
????????db.AddReturnParameter(cmd,?"@returnValue",?DbType.Int32);
????????if?(t?==?null)?db.ExecuteNonQuery(cmd);
????????else?db.ExecuteNonQuery(cmd,t);
????????string?s?=?db.GetParameter(cmd,?"@outString").Value?as?string;//out?parameter
????????int?r?=?Convert.ToInt32(db.GetParameter(cmd,?"@returnValue").Value);//return?value
????}
????public?void?D2(Trans?t)
????{
????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("insert?t1?(id)values('..')");????????
????????if?(t?==?null)?db.ExecuteNonQuery(cmd);
????????else?db.ExecuteNonQuery(cmd,?t);
????} ????<appSettings>
????????<add?key="DbHelperProvider"?value="System.Data.SqlClient"/>
????????<add?key="DbHelperConnectionString"?value="Data?Source=(local);Initial?Catalog=DbHelperTest;Persist?Security?Info=True;User?ID=sa;Password=sa"/>
????appSettings> 其實(shí),DbHelper需要的僅僅是兩個(gè)字符串,你可以自己修改,作成加密什么的...
好了,就這樣,DbHelper的代碼是非常簡(jiǎn)單和透明的,只是在ado.net上做了一點(diǎn)小包裝,改變了一下使用它的程序員的編碼方式,去除掉一些比較"物理級(jí)"的編程概念,如connection的open和close之類的,使程序員更專注于業(yè)務(wù)邏輯代碼的編寫,少死掉點(diǎn)腦細(xì)胞,另外,統(tǒng)一了數(shù)據(jù)操作層的數(shù)據(jù)操作代碼的風(fēng)格和格式,維護(hù)起來很方便的撒~~~
?
轉(zhuǎn)載于:https://blog.51cto.com/yaya123/99615
總結(jié)
以上是生活随笔為你收集整理的DbHelper数据操作类,DbProviderFactories的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。