处女篇:自用C#后端SqlHelper.cs类

自用SqlHelper.cs类,此类来自软谋教育徐老师课程SqlHelper.cs!

  1 using System;
  2 using System.Collections;
  3 using System.Collections.Generic;
  4 using System.Configuration;
  5 using System.Data;
  6 using System.Data.SqlClient;
  7 using System.Linq;
  8 using System.Web;
  9 
 10 namespace PROJECT20160712
 11 {
 12     /// 此类为抽象类,
 13     /// 不允许实例化,在应用时直接调用即可
 14     /// </summary>
 15     public abstract class SqlHelper
 16     {
 17         /// <summary>
 18         /// 数据库连接字符串
 19         /// </summary>
 20 
 21         public static readonly string connectionString = ConfigurationManager.ConnectionStrings["con"].ToString();
 22         // Hashtable to store cached parameters
 23         private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
 24 
 25         #region//ExecteNonQuery方法
 26 
 27         /// <summary>
 28         ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
 29         /// 使用参数数组形式提供参数列表 
 30         /// </summary>
 31         /// <param name="connectionString">一个有效的数据库连接字符串</param>
 32         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
 33         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
 34         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
 35         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
 36         public static int ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 37         {
 38             SqlCommand cmd = new SqlCommand();
 39             using (SqlConnection conn = new SqlConnection(connectionString))
 40             {
 41                 //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
 42                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
 43                 int val = cmd.ExecuteNonQuery();
 44                 //清空SqlCommand中的参数列表
 45                 cmd.Parameters.Clear();
 46                 return val;
 47             }
 48         }
 49 
 50         /// <summary>
 51         ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
 52         /// 使用参数数组形式提供参数列表 
 53         /// </summary>
 54         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
 55         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
 56         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
 57         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
 58         public static int ExecteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 59         {
 60             return ExecteNonQuery(connectionString, cmdType, cmdText, commandParameters);
 61         }
 62 
 63         /// <summary>
 64         ///存储过程专用
 65         /// </summary>
 66         /// <param name="cmdText">存储过程的名字</param>
 67         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
 68         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
 69         public static int ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters)
 70         {
 71             return ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters);
 72         }
 73 
 74         /// <summary>
 75         ///Sql语句专用
 76         /// </summary>
 77         /// <param name="cmdText">T_Sql语句</param>
 78         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
 79         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
 80         public static int ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters)
 81         {
 82             return ExecteNonQuery(CommandType.Text, cmdText, commandParameters);
 83         }
 84 
 85         #endregion
 86         #region//GetTable方法
 87 
 88         /// <summary>
 89         /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
 90         /// 使用参数数组提供参数
 91         /// </summary>
 92         /// <param name="connecttionString">一个现有的数据库连接</param>
 93         /// <param name="cmdTye">SqlCommand命令类型</param>
 94         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
 95         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
 96         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
 97         public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
 98         {
 99             SqlCommand cmd = new SqlCommand();
100             DataSet ds = new DataSet();
101             using (SqlConnection conn = new SqlConnection(connecttionString))
102             {
103                 PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters);
104                 SqlDataAdapter adapter = new SqlDataAdapter();
105                 adapter.SelectCommand = cmd;
106                 adapter.Fill(ds);
107             }
108             DataTableCollection table = ds.Tables;
109             return table;
110         }
111 
112         /// <summary>
113         /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
114         /// 使用参数数组提供参数
115         /// </summary>
116         /// <param name="cmdTye">SqlCommand命令类型</param>
117         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
118         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
119         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
120         public static DataTableCollection GetTable(CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
121         {
122             return GetTable(cmdTye, cmdText, commandParameters);
123         }
124 
125 
126         /// <summary>
127         /// 存储过程专用
128         /// </summary>
129         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
130         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
131         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
132         public static DataTableCollection GetTableProducts(string cmdText, SqlParameter[] commandParameters)
133         {
134             return GetTable(CommandType.StoredProcedure, cmdText, commandParameters);
135         }
136 
137         /// <summary>
138         /// Sql语句专用
139         /// </summary>
140         /// <param name="cmdText"> T-SQL 语句</param>
141         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
142         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
143         public static DataTableCollection GetTableText(string cmdText, SqlParameter[] commandParameters)
144         {
145             return GetTable(CommandType.Text, cmdText, commandParameters);
146         }
147         #endregion
148 
149 
150         /// <summary>
151         /// 为执行命令准备参数
152         /// </summary>
153         /// <param name="cmd">SqlCommand 命令</param>
154         /// <param name="conn">已经存在的数据库连接</param>
155         /// <param name="trans">数据库事物处理</param>
156         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
157         /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param>
158         /// <param name="cmdParms">返回带参数的命令</param>
159         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
160         {
161             //判断数据库连接状态
162             if (conn.State != ConnectionState.Open)
163                 conn.Open();
164             cmd.Connection = conn;
165             cmd.CommandText = cmdText;
166             //判断是否需要事物处理
167             if (trans != null)
168                 cmd.Transaction = trans;
169             cmd.CommandType = cmdType;
170             if (cmdParms != null)
171             {
172                 foreach (SqlParameter parm in cmdParms)
173                     cmd.Parameters.Add(parm);
174             }
175         }
176 
177         /// <summary>
178         /// Execute a SqlCommand that returns a resultset against the database specified in the connection string 
179         /// using the provided parameters.
180         /// </summary>
181         /// <param name="connectionString">一个有效的数据库连接字符串</param>
182         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
183         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
184         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
185         /// <returns>A SqlDataReader containing the results</returns>
186         public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
187         {
188             SqlCommand cmd = new SqlCommand();
189             SqlConnection conn = new SqlConnection(connectionString);
190             // we use a try/catch here because if the method throws an exception we want to 
191             // close the connection throw code, because no datareader will exist, hence the 
192             // commandBehaviour.CloseConnection will not work
193             try
194             {
195                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
196                 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
197                 cmd.Parameters.Clear();
198                 return rdr;
199             }
200             catch
201             {
202                 conn.Close();
203                 throw;
204             }
205         }
206         #region//ExecuteDataSet方法
207 
208         /// <summary>
209         /// return a dataset
210         /// </summary>
211         /// <param name="connectionString">一个有效的数据库连接字符串</param>
212         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
213         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
214         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
215         /// <returns>return a dataset</returns>
216         public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
217         {
218             SqlConnection conn = new SqlConnection(connectionString);
219             SqlCommand cmd = new SqlCommand();
220             try
221             {
222                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
223                 SqlDataAdapter da = new SqlDataAdapter();
224                 DataSet ds = new DataSet();
225                 da.SelectCommand = cmd;
226                 da.Fill(ds);
227                 return ds;
228             }
229             catch
230             {
231                 conn.Close();
232                 throw;
233             }
234         }
235 
236 
237         /// <summary>
238         /// 返回一个DataSet
239         /// </summary>
240         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
241         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
242         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
243         /// <returns>return a dataset</returns>
244         public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
245         {
246             return ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters);
247         }
248 
249         /// <summary>
250         /// 返回一个DataSet
251         /// </summary>
252         /// <param name="cmdText">存储过程的名字</param>
253         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
254         /// <returns>return a dataset</returns>
255         public static DataSet ExecuteDataSetProducts(string cmdText, params SqlParameter[] commandParameters)
256         {
257             return ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
258         }
259 
260         /// <summary>
261         /// 返回一个DataSet
262         /// </summary>
263 
264         /// <param name="cmdText">T-SQL 语句</param>
265         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
266         /// <returns>return a dataset</returns>
267         public static DataSet ExecuteDataSetText(string cmdText, params SqlParameter[] commandParameters)
268         {
269             return ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters);
270         }
271 
272 
273         public static DataView ExecuteDataSet(string connectionString, string sortExpression, string direction, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
274         {
275             SqlConnection conn = new SqlConnection(connectionString);
276             SqlCommand cmd = new SqlCommand();
277             try
278             {
279                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
280                 SqlDataAdapter da = new SqlDataAdapter();
281                 DataSet ds = new DataSet();
282                 da.SelectCommand = cmd;
283                 da.Fill(ds);
284                 DataView dv = ds.Tables[0].DefaultView;
285                 dv.Sort = sortExpression + " " + direction;
286                 return dv;
287             }
288             catch
289             {
290                 conn.Close();
291                 throw;
292             }
293         }
294         #endregion
295 
296 
297         #region // ExecuteScalar方法
298 
299 
300         /// <summary>
301         /// 返回第一行的第一列
302         /// </summary>
303         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
304         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
305         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
306         /// <returns>返回一个对象</returns>
307         public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
308         {
309             return ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters);
310         }
311 
312         /// <summary>
313         /// 返回第一行的第一列存储过程专用
314         /// </summary>
315         /// <param name="cmdText">存储过程的名字</param>
316         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
317         /// <returns>返回一个对象</returns>
318         public static object ExecuteScalarProducts(string cmdText, params SqlParameter[] commandParameters)
319         {
320             return ExecuteScalar(SqlHelper.connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
321         }
322 
323         /// <summary>
324         /// 返回第一行的第一列Sql语句专用
325         /// </summary>
326         /// <param name="cmdText">者 T-SQL 语句</param>
327         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
328         /// <returns>返回一个对象</returns>
329         public static object ExecuteScalarText(string cmdText, params SqlParameter[] commandParameters)
330         {
331             return ExecuteScalar(SqlHelper.connectionString, CommandType.Text, cmdText, commandParameters);
332         }
333 
334         /// <summary>
335         /// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string 
336         /// using the provided parameters.
337         /// </summary>
338         /// <remarks>
339         /// e.g.:  
340         ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
341         /// </remarks>
342         /// <param name="connectionString">一个有效的数据库连接字符串</param>
343         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
344         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
345         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
346         /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
347         public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
348         {
349             SqlCommand cmd = new SqlCommand();
350 
351             using (SqlConnection connection = new SqlConnection(connectionString))
352             {
353                 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
354                 object val = cmd.ExecuteScalar();
355                 cmd.Parameters.Clear();
356                 return val;
357             }
358         }
359 
360         /// <summary>
361         /// Execute a SqlCommand that returns the first column of the first record against an existing database connection 
362         /// using the provided parameters.
363         /// </summary>
364         /// <remarks>
365         /// e.g.:  
366         ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
367         /// </remarks>
368         /// <param name="connectionString">一个有效的数据库连接字符串</param>
369         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
370         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
371         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
372         /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
373         public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
374         {
375             SqlCommand cmd = new SqlCommand();
376             PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
377             object val = cmd.ExecuteScalar();
378             cmd.Parameters.Clear();
379             return val;
380         }
381 
382         #endregion
383 
384 
385         /// <summary>
386         /// add parameter array to the cache
387         /// </summary>
388         /// <param name="cacheKey">Key to the parameter cache</param>
389         /// <param name="cmdParms">an array of SqlParamters to be cached</param>
390         public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
391         {
392             parmCache[cacheKey] = commandParameters;
393         }
394 
395         /// <summary>
396         /// Retrieve cached parameters
397         /// </summary>
398         /// <param name="cacheKey">key used to lookup parameters</param>
399         /// <returns>Cached SqlParamters array</returns>
400         public static SqlParameter[] GetCachedParameters(string cacheKey)
401         {
402             SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
403             if (cachedParms == null)
404                 return null;
405             SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
406             for (int i = 0, j = cachedParms.Length; i < j; i++)
407                 clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
408             return clonedParms;
409         }
410 
411 
412         /// <summary>
413         /// 检查是否存在
414         /// </summary>
415         /// <param name="strSql">Sql语句</param>
416         /// <returns>bool结果</returns>
417         public static bool Exists(string strSql)
418         {
419             int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, null));
420             if (cmdresult == 0)
421             {
422                 return false;
423             }
424             else
425             {
426                 return true;
427             }
428         }
429 
430         /// <summary>
431         /// 检查是否存在
432         /// </summary>
433         /// <param name="strSql">Sql语句</param>
434         /// <param name="cmdParms">参数</param>
435         /// <returns>bool结果</returns>
436         public static bool Exists(string strSql, params SqlParameter[] cmdParms)
437         {
438             int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms));
439             if (cmdresult == 0)
440             {
441                 return false;
442             }
443             else
444             {
445                 return true;
446             }
447         }
448     }
449 }

 

posted @ 2016-07-15 10:57  周银胜  阅读(7378)  评论(1编辑  收藏  举报