DbHelper数据操作类,DbProviderFactories
生活随笔
收集整理的這篇文章主要介紹了
DbHelper数据操作类,DbProviderFactories
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
其實,微軟的企業庫中有一個非常不錯的數據操作類了.但是,不少公司(起碼我遇到的幾個...),對一些"封裝"了些什么的東西不太敢用,雖然我推薦過微軟的企業庫框架了...但是還是要"評估"...一評就是幾個月...而且,一些公司有的根本就是裸ado.net開發,或者自己封裝的數據庫操作類非常別扭,很不好用.
??????這里我給大家共享一個我參照企業庫中的數據操作組件編碼風格寫的數據庫操作類,對使用它的程序員來說,編碼是很舒服滴(起碼我覺得很好撒).以下是代碼,很簡單的,沒有做任何多余的封裝,只是改變了ADO.NET的編碼步驟,方便了具體開發數據庫操作代碼的程序員. ????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;
????????}
????????增加參數#region?增加參數
????????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
????????執行#region?執行
????????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????????
????????執行事務#region?執行事務
????????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();
????????????}
????????}
????} 那么如何使用它呢?下面我給出一些基本的使用示例,基本能滿足你大部分的數據庫操作需要了.
1)直接執行sql語句 ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("insert?t1?(id)values('haha')");
????????db.ExecuteNonQuery(cmd); 2)執行存儲過程 ????????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)輸入參數/輸出參數/返回值的使用(比較重要哦) ????????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)事務的使用.(項目中需要將基本的數據庫操作組合成一個完整的業務流時,代碼級的事務是必不可少的哦)
以上我們好像沒有指定數據庫連接字符串,大家如果看下DbHelper的代碼,就知道要使用它必須在config中配置兩個參數,如下:
? ????pubic?void?DoBusiness()
????{
????????using?(Trans?t?=?new?Trans())
????????{
????????????try
????????????{
????????????????D1(t);
????????????????throw?new?Exception();//如果有異常,會回滾滴
????????????????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> 其實,DbHelper需要的僅僅是兩個字符串,你可以自己修改,作成加密什么的...
好了,就這樣,DbHelper的代碼是非常簡單和透明的,只是在ado.net上做了一點小包裝,改變了一下使用它的程序員的編碼方式,去除掉一些比較"物理級"的編程概念,如connection的open和close之類的,使程序員更專注于業務邏輯代碼的編寫,少死掉點腦細胞,另外,統一了數據操作層的數據操作代碼的風格和格式,維護起來很方便的撒~~~
?
??????這里我給大家共享一個我參照企業庫中的數據操作組件編碼風格寫的數據庫操作類,對使用它的程序員來說,編碼是很舒服滴(起碼我覺得很好撒).以下是代碼,很簡單的,沒有做任何多余的封裝,只是改變了ADO.NET的編碼步驟,方便了具體開發數據庫操作代碼的程序員. ????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;
????????}
????????增加參數#region?增加參數
????????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
????????執行#region?執行
????????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????????
????????執行事務#region?執行事務
????????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();
????????????}
????????}
????} 那么如何使用它呢?下面我給出一些基本的使用示例,基本能滿足你大部分的數據庫操作需要了.
1)直接執行sql語句 ????????DbHelper?db?=?new?DbHelper();
????????DbCommand?cmd?=?db.GetSqlStringCommond("insert?t1?(id)values('haha')");
????????db.ExecuteNonQuery(cmd); 2)執行存儲過程 ????????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)輸入參數/輸出參數/返回值的使用(比較重要哦) ????????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)事務的使用.(項目中需要將基本的數據庫操作組合成一個完整的業務流時,代碼級的事務是必不可少的哦)
以上我們好像沒有指定數據庫連接字符串,大家如果看下DbHelper的代碼,就知道要使用它必須在config中配置兩個參數,如下:
? ????pubic?void?DoBusiness()
????{
????????using?(Trans?t?=?new?Trans())
????????{
????????????try
????????????{
????????????????D1(t);
????????????????throw?new?Exception();//如果有異常,會回滾滴
????????????????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> 其實,DbHelper需要的僅僅是兩個字符串,你可以自己修改,作成加密什么的...
好了,就這樣,DbHelper的代碼是非常簡單和透明的,只是在ado.net上做了一點小包裝,改變了一下使用它的程序員的編碼方式,去除掉一些比較"物理級"的編程概念,如connection的open和close之類的,使程序員更專注于業務邏輯代碼的編寫,少死掉點腦細胞,另外,統一了數據操作層的數據操作代碼的風格和格式,維護起來很方便的撒~~~
?
轉載于:https://blog.51cto.com/yaya123/99615
總結
以上是生活随笔為你收集整理的DbHelper数据操作类,DbProviderFactories的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 擦肩而过
- 下一篇: [转]java取得Linuxcpu,内存