SqlHelper

SqlHelper是一個基於.NET Framework的資料庫操作組件。組件中包含資料庫操作方法。SqlHelper用於簡化你重複的去寫那些資料庫連線(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封裝過後通常是只需要給方法傳入一些參數如資料庫連線字元串,SQL參數等,就可以訪問資料庫了,很方便。

基本介紹

  • 中文名:SqlHelper
  • 性質:資料庫操作組件
  • 包含:資料庫操作方法
  • 基於:·NET Framework
簡介,配置項,源碼,靜態方式,對象式編程,成員,注意,源程式,

簡介

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[]參數的方法無法獲取存儲過程返回值

源程式

(中文注釋)/// <summary>/// 自定義訪問通用類/// </summary>public class SqlDbHelper{string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;/// <summary>///構造函式/// </summary>public SqlDbHelper(){}/// <summary>/// ExecuteNonQuery操作,對資料庫進行 增、刪、改 操作((1)/// </summary>/// <param name="sql">要執行的SQL語句 </param>/// <returns> </returns>public int ExecuteNonQuery(string sql){return ExecuteNonQuery(sql, CommandType.Text, null);}/// <summary>/// ExecuteNonQuery操作,對資料庫進行 增、刪、改 操作(2)/// </summary>/// <param name="commandType">要執行的查詢類型(存儲過程、SQL文本) </param>/// <returns> </returns>public int ExecuteNonQuery(string sql, CommandType commandType){return ExecuteNonQuery(sql, commandType, null);}/// <summary>/// ExecuteNonQuery操作,對資料庫進行 增、刪、改 操作(3)/// </summary>/// <param name="parameters">參數數組 </param>/// <returns> </returns>public int ExecuteNonQuery(string sql, CommandType commandType,params SqlParameter[] parameters){int count = 0;{using (SqlCommand command = new SqlCommand(sql, connection)){command.CommandType = commandType;if (parameters != null){foreach (SqlParameter parameter in parameters){command.Parameters.Add(parameter);}}connection.Open();count = command.ExecuteNonQuery();}}return count;}/// <summary>/// SqlDataAdapter的Fill方法查詢,並返回一個DataSet類型結果(1)/// </summary>/// <returns> </returns>{return ExecuteDataSet(sql, CommandType.Text, null);}/// <summary>/// SqlDataAdapter的Fill 方法 執行一 查詢,並返回一個DataSet類型結果(2)/// </summary>/// <returns> </returns>{return ExecuteDataSet(sql, commandType, null);}/// <summary>/// SqlDataAdapter的Fill方法執行查詢,並返回一個DataSet類型結果(3)/// </summary>/// <returns> </returns>public DataSet ExecuteDataSet(string sql, CommandType commandType, SqlParameter[] parameters){DataSet ds = new DataSet();{using (SqlCommand command = new SqlCommand(sql, connection)){command.CommandType = commandType;if (parameters != null){foreach (SqlParameter parameter in parameters){command.Parameters.Add(parameter);}}SqlDataAdapter adapter = new SqlDataAdapter(command);adapter.Fill(ds);}}return ds;}/// <summary>/// SqlDataAdapter的Fill方法執行個查詢,並返回一個DataTable類型結果(1)/// </summary>/// <returns> </returns>public DataTable ExecuteDataTable(string sql){return ExecuteDataTable(sql, CommandType.Text, null);}/// <summary>/// SqlDataAdapter的Fil執行一個查詢,並返回一個DataTable類型結果(2)/// </summary>/// <returns> </returns>public DataTable ExecuteDataTable (string sql, CommandType commandType){return ExecuteDataTable(sql, commandType, null);}/// <summary>/// SqlDataAdapter的Fill方法,執行一個查詢,並返回一個DataTable類型結果(3)/// </summary>/// <returns> </returns>public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters){DataTable data = new DataTable();using (SqlConnection connection = new SqlConnection(connectionString)){using (SqlCommand command = new SqlCommand(sql, connection)){command.CommandType = commandType;if (parameters != null){foreach (SqlParameter parameter in parameters){command.Parameters.Add(parameter);}}adapter.Fill(data);}}return data;}/// <summary>/// ExecuteReader執行一查詢,返回一SqlDataReader對象實例(1)/// </summary>/// <returns> </returns>public SqlDataReaderExecuteReader (string sql){return ExecuteReader(sql, CommandType.Text, null);}/// <summary>/// ExecuteReader執行一查詢,返回一SqlDataReader對象實例(2)/// </summary>/// <returns> </returns>publicSqlDataReader ExecuteReader(string sql, CommandType commandType){return ExecuteReader(sql, commandType, null);}/// <summary>/// ExecuteReader執行一查詢,返回一SqlDataReader對象實例(3)/// </summary>/// <returns> </returns>publicSqlDataReader ExecuteReader( string sql, CommandType commandType, SqlParameter[] parameters){SqlConnection connection = new SqlConnection(connectionString);SqlCommand command = new SqlCommand(sql, connection);command.CommandType = commandType;if (parameters != null){foreach (SqlParameter parameter in parameters){command.Parameters.Add(parameter);}}connection.Open();return command.ExecuteReader(CommandBehavior.CloseConnection);}/// <summary>/// ExecuteScalar執行一查詢,返回查詢結果的第一行第一列(1)/// </summary>/// <returns> </returns>public Object ExecuteScalar(string sql){return ExecuteScalar(sql, CommandType.Text, null);}/// <summary>/// ExecuteScalar執行一查詢,返回查詢結果的第一行第一列(2)/// </summary>/// <returns> </returns>public Object ExecuteScalar( string sql, CommandType commandType){return ExecuteScalar(sql, commandType, null);}/// <summary>/// ExecuteScalar執行一查詢,返回查詢結果的第一行第一列(3)/// </summary>/// <returns> </returns>{object result = null;{using (SqlCommand command = new SqlCommand(sql, connection)){command.CommandType = commandType;if (parameters != null){foreach (SqlParameter parameter in parameters){command.Parameters.Add(parameter);}}connection.Open();result = command.ExecuteScalar();}}return result;}/// <summary>/// 返回當前連線的資料庫中所有由用戶創建的資料庫/// </summary>/// <returns> </returns>public DataTable GetTables(){DataTable data = null;{connection.Open();data = connection.GetSchema("Tables");}return data;}}

相關詞條

熱門詞條

聯絡我們