關於SqlHelper的詳解


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

sqlhelper是C#中abstract抽象類的典型應用

簡介

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>

  

<appSettings>
    <add key="" value="">
</appSettings>
View Code

源碼


編寫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語句而己:
 
1 using (SqlServerHelper helper = new SqlServerHelper())
2 {
3 helper.Command.CommandText = "delete from [Students] where stid=@stid";
4 helper.AddParameter("@stid", SqlDbType. Int, student_id);
5 helper.Open();
6 helper.ExecuteNoneQuery();
7 helper.Command.Parameters.Clear();
8 helper.Command.CommandText = "select * from [Students]";return helper.ReadTable();
9 }
View Code
這是官方示例代碼中的一部分,語法簡單,在一個using語句中執行了delete刪除語句和select查語句。
比如,如果你想執行 事務時,可以使用:
 1 using (SqlServerHelper helper = new SqlServerHelper())
 2 {
 3 helper.Command.CommandText = "delete from [Students] where stid=@stid";
 4 helper.AddParameter("@stid", SqlDbType. Int, student_id);
 5 helper.Open();
 6 DbTransaction tran = helper.Connection.BeginTransaction();
 7 helper.Command.Transaction=tran;
 8 try
 9 {
10 helper.ExecuteNoneQuery();
11 tran.Rollback();
12 }
13 catch { tran.Rollback(); throw; }
14 }
View Code

成員


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

源程序

  1 (中文注釋)
  2 /// <summary>
  3 /// 自定義訪問通用類
  4 /// </summary>
  5 public class SqlDbHelper
  6 {
  7 string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
  8 /// <summary>
  9 ///構造函數
 10 /// </summary>
 11 public SqlDbHelper()
 12 {
 13 }
 14 /// <summary>
 15 /// ExecuteNonQuery操作,對數據庫進行 增、刪、改 操作((1)
 16 /// </summary>
 17 /// <param name="sql">要執行的SQL語句 </param>
 18 /// <returns> </returns>
 19 public int ExecuteNonQuery(string sql)
 20 {
 21 return ExecuteNonQuery(sql, CommandType.Text, null);
 22 }
 23 /// <summary>
 24 /// ExecuteNonQuery操作,對數據庫進行 增、刪、改 操作(2)
 25 /// </summary>
 26 /// <param name="commandType">要執行的查詢類型(存儲過程、SQL文本) </param>
 27 /// <returns> </returns>
 28 public int ExecuteNonQuery(string sql, CommandType commandType)
 29 {
 30 return ExecuteNonQuery(sql, commandType, null);
 31 }
 32 /// <summary>
 33 /// ExecuteNonQuery操作,對數據庫進行 增、刪、改 操作(3)
 34 /// </summary>
 35 /// <param name="parameters">參數數組 </param>
 36 /// <returns> </returns>
 37 public int ExecuteNonQuery(string sql, CommandType commandType,params SqlParameter[] parameters)
 38 {
 39 int count = 0;
 40 {
 41 using (SqlCommand command = new SqlCommand(sql, connection))
 42 {
 43 command.CommandType = commandType;
 44 if (parameters != null)
 45 {
 46 foreach (SqlParameter parameter in parameters)
 47 {
 48 command.Parameters.Add(parameter);
 49 }
 50 }
 51 connection.Open();
 52 count = command.ExecuteNonQuery();
 53 }
 54 }
 55 return count;
 56 }
 57 /// <summary>
 58 /// SqlDataAdapter的Fill方法查詢,並返回一個DataSet類型結果(1)
 59 /// </summary>
 60 /// <returns> </returns>
 61 {
 62 return ExecuteDataSet(sql, CommandType.Text, null);
 63 }
 64 /// <summary>
 65 /// SqlDataAdapter的Fill 方法 執行一 查詢,並返回一個DataSet類型結果(2)
 66 /// </summary>
 67 /// <returns> </returns>
 68 {
 69 return ExecuteDataSet(sql, commandType, null);
 70 }
 71 /// <summary>
 72 /// SqlDataAdapter的Fill方法執行查詢,並返回一個DataSet類型結果(3)
 73 /// </summary>
 74 /// <returns> </returns>
 75 public DataSet ExecuteDataSet(string sql, CommandType commandType, SqlParameter[] parameters)
 76 {
 77 DataSet ds = new DataSet();
 78 {
 79 using (SqlCommand command = new SqlCommand(sql, connection))
 80 {
 81 command.CommandType = commandType;
 82 if (parameters != null)
 83 {
 84 foreach (SqlParameter parameter in parameters)
 85 {
 86 command.Parameters.Add(parameter);
 87 }
 88 }
 89 SqlDataAdapter adapter = new SqlDataAdapter(command);
 90 adapter.Fill(ds);
 91 }
 92 }
 93 return ds;
 94 }
 95 /// <summary>
 96 /// SqlDataAdapter的Fill方法執行個查詢,並返回一個DataTable類型結果(1)
 97 /// </summary>
 98 /// <returns> </returns>
 99 public DataTable ExecuteDataTable(string sql)
100 {
101 return ExecuteDataTable(sql, CommandType.Text, null);
102 }
103 /// <summary>
104 /// SqlDataAdapter的Fil執行一個查詢,並返回一個DataTable類型結果(2)
105 /// </summary>
106 /// <returns> </returns>
107 public DataTable ExecuteDataTable (string sql, CommandType commandType)
108 {
109 return ExecuteDataTable(sql, commandType, null);
110 }
111 /// <summary>
112 /// SqlDataAdapter的Fill方法,執行一個查詢,並返回一個DataTable類型結果(3)
113 /// </summary>
114 /// <returns> </returns>
115 public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters)
116 {
117 DataTable data = new DataTable();
118 using (SqlConnection connection = new SqlConnection(connectionString))
119 {
120 using (SqlCommand command = new SqlCommand(sql, connection))
121 {
122 command.CommandType = commandType;
123 if (parameters != null)
124 {
125 foreach (SqlParameter parameter in parameters)
126 {
127 command.Parameters.Add(parameter);
128 }
129 }
130 adapter.Fill(data);
131 }
132 }
133 return data;
134 }
135 /// <summary>
136 /// ExecuteReader執行一查詢,返回一SqlDataReader對象實例(1)
137 /// </summary>
138 /// <returns> </returns>
139 public SqlDataReaderExecuteReader (string sql)
140 {
141 return ExecuteReader(sql, CommandType.Text, null);
142 }
143 /// <summary>
144 /// ExecuteReader執行一查詢,返回一SqlDataReader對象實例(2)
145 /// </summary>
146 /// <returns> </returns>
147 publicSqlDataReader ExecuteReader(string sql, CommandType commandType)
148 {
149 return ExecuteReader(sql, commandType, null);
150 }
151 /// <summary>
152 /// ExecuteReader執行一查詢,返回一SqlDataReader對象實例(3)
153 /// </summary>
154 /// <returns> </returns>
155 publicSqlDataReader ExecuteReader( string sql, CommandType commandType, SqlParameter[] parameters)
156 {
157 SqlConnection connection = new SqlConnection(connectionString);
158 SqlCommand command = new SqlCommand(sql, connection);
159 command.CommandType = commandType;
160 if (parameters != null)
161 {
162 foreach (SqlParameter parameter in parameters)
163 {
164 command.Parameters.Add(parameter);
165 }
166 }
167 connection.Open();
168 return command.ExecuteReader(CommandBehavior.CloseConnection);
169 }
170 /// <summary>
171 /// ExecuteScalar執行一查詢,返回查詢結果的第一行第一列(1)
172 /// </summary>
173 /// <returns> </returns>
174 public Object ExecuteScalar(string sql)
175 {
176 return ExecuteScalar(sql, CommandType.Text, null);
177 }
178 /// <summary>
179 /// ExecuteScalar執行一查詢,返回查詢結果的第一行第一列(2)
180 /// </summary>
181 /// <returns> </returns>
182 public Object ExecuteScalar( string sql, CommandType commandType)
183 {
184 return ExecuteScalar(sql, commandType, null);
185 }
186 /// <summary>
187 /// ExecuteScalar執行一查詢,返回查詢結果的第一行第一列(3)
188 /// </summary>
189 /// <returns> </returns>
190 {
191 object result = null;
192 {
193 using (SqlCommand command = new SqlCommand(sql, connection))
194 {
195 command.CommandType = commandType;
196 if (parameters != null)
197 {
198 foreach (SqlParameter parameter in parameters)
199 {
200 command.Parameters.Add(parameter);
201 }
202 }
203 connection.Open();
204 result = command.ExecuteScalar();
205 }
206 }
207 return result;
208 }
209 /// <summary>
210 /// 返回當前連接的數據庫中所有由用戶創建的數據庫
211 /// </summary>
212 /// <returns> </returns>
213 public DataTable GetTables()
214 {
215 DataTable data = null;
216 {
217 connection.Open();
218 data = connection.GetSchema("Tables");
219 }
220 return data;
221 }
222 }
View Code

 

 


免責聲明!

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



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