簡介
SqlHelper是一個基於.NET Framework的資料庫操作組件。組件中包含資料庫操作方法,SqlHelper有很多版本,主要以微軟一開始發布的SqlHelper類,後面包含進了Enterprise Library開源包中了。還有一個主要版本是dbhelper .org開源的sqlhelper組件,優點是簡潔,高性能,不僅僅支持sqlserver,同時支持sqlserver、oracle、access、Mysql資料庫,也是一個開源項目,提供免費下載。
SqlHelper用於簡化你重複的去寫那些資料庫連線(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封裝過後通常是只需要給方法傳入一些參數如資料庫連線字元串,SQL參數等,就可以訪問資料庫了,很方便。
SqlHelper 類用於通過一組靜態方法來封裝數據訪問功能。該類不能被繼承或實例化,因此將其聲明為包含專用構造函式的不可繼承類。在 SqlHelper 類中實現的每種方法都提供了一組一致的重載。這提供了一種很好的使用 SqlHelper 類來執行命令的模式,同時為開發人員選擇訪問數據的方式提供了必要的靈活性。每種方法的重載都支持不同的方法參數,因此開發人員可以確定傳遞連線、事務和參數信息的方式。
配置項
在套用SqlHelper前最好使用web.config配置連線字元串,這樣有利於網站的可移植性和代碼的簡潔。
<connectionStrings>
<!--SqlServerHelper連線字元串設定-->
<add connectionString="server=.;uid=sa;pwd=123456;database=yourdatabase" name="SqlServerHelper"/>
<!--Oracle連線字元串設定-->
<add connectionString="Data Source=orcl;User Id=system;Password=***;Integrated Security=no" name="OracleHelper"/>
<!--MySql連線字元串設定-->
<add connectionString="server=localhost;uid=root;pwd=123456;database=mysqldatabase" name="MySqlHelper"/>
</connectionStrings>
<!--access連線字元串設定-->
<add connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\mdbFilePath\db.mdb;Jet OLEDB:Database Password=123" name="MySqlHelper"/>
</connectionStrings>
源碼
編寫SqlHelper調用代碼:
SqlHelper支持多種資料庫包括MySql、SqlServer、Oracle、Access資料庫,如果資料庫是SqlServer,那么你可以使用SqlServerHelper類,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle則可以使用OracleHelper類。
SqlHelper的書寫風格很多,你可以選擇自己的需求和愛好使用靜態方式或對象方式。各種利弊。選擇情況使用吧!
靜態方式
靜態方式也是目前套用最多的一種,因為其簡單,所以在寫一個Sql語句時,用一個方法就可以搞定。如果一個過程需要多個Sql語句執行時,得創建SqlConnection和控制他的傳參,使語句複雜。或者就是每執行一個sql語句讓SqlConnection創建一次,使性能受到影響。但是在只執行一個簡單的查詢語句時,顯的更簡單,所以這種方式在簡單的執行邏輯面前,受到大家的喜愛!
//查詢語句執行:
DataTable dt=SqlServerHelper.ReadTable("select * from table1");
//插入語句執行:
SqlServerHelper.ExecuteNonQuery("insert into [students] values(@student_name,@class“),
SqlServerHelper.CreateInputParameter("@student_name", SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),
SqlServerHelper.CreateInputParameter("@class", SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)
);
簡單吧,這讓項目顯的代碼又簡單,又清晰!
對象式編程
其實這種語法也不複雜,只是加個using語句而己:
using (SqlServerHelper helper = new SqlServerHelper())
{
helper.Command.CommandText = "delete from [Students] where stid=@stid";
helper.AddParameter("@stid", SqlDbType. Int, student_id);
helper.Open();
helper.ExecuteNoneQuery();
helper.Command.Parameters.Clear();
helper.Command.CommandText = "select * from [Students]";return helper.ReadTable();
}
這是官方示例代碼中的一部分,語法簡單,在一個using語句中執行了delete刪除語句和select查語句。
比如,如果你想執行事務時,可以使用:
using (SqlServerHelper helper = new SqlServerHelper())
{
helper.Command.CommandText = "delete from [Students] where stid=@stid";
helper.AddParameter("@stid", SqlDbType. Int, student_id);
helper.Open();
DbTransaction tran = helper.Connection.BeginTransaction();
helper.Command.Transaction=tran;
try
{
helper.ExecuteNoneQuery();
tran.Rollback();
}
catch { tran.Rollback(); throw; }
}
成員
在 SqlHelper 類中實現的方法包括:
ExecuteNonQuery。此方法用於執行不返回任何行或值的命令。這些命令通常用於執行資料庫更新,但也可用於返回存儲過程的輸出參數。
ExecuteReader。此方法用於返回SqlDataReader對象,該對象包含由某一命令返回的結果集。
ExecuteDataset。此方法返回DataSet對象,該對象包含由某一命令返回的結果集。
ExecuteScalar。此方法返回一個值。該值始終是該命令返回的第一行的第一列。
ExecuteXmlReader。此方法返回 FOR XML 查詢的 XML 片段。
除了這些公共方法外,SqlHelper 類還包含一些專用函式,用於管理參數和準備要執行的命令。不管客戶端調用什麼樣的方法實現,所有命令都通過 SqlCommand 對象來執行。在 SqlCommand 對象能夠被執行之前,所有參數都必須添加到 Parameters 集合中,並且必須正確設定 Connection、CommandType、CommandText 和 Transaction 屬性。SqlHelper 類中的專用函式主要用於提供一種一致的方式,以便向 SQL Server 資料庫發出命令,而不考慮客戶端應用程式調用的重載方法實現。SqlHelper 類中的專用實用程式函式包括:
AttachParameters:該函式用於將所有必要的 SqlParameter 對象連線到正在運行的 SqlCommand。
AssignParameterValues:該函式用於為 SqlParameter 對象賦值。
PrepareCommand:該函式用於對命令的屬性(如連線、事務環境等)進行初始化。
ExecuteReader:此專用 ExecuteReader 實現用於通過適當的 CommandBehavior 打開SqlDataReader對象,以便最有效地管理與閱讀器關聯的連線的有效期。
注意
1、如果使用SqlHelper方法調用資料庫存儲過程,需要獲取存儲過程的返回值,請使用帶有SqlParameter[]參數的方法,Object[]參數的方法無法獲取存儲過程返回值