C# SqlHelper数据库处理类

SQLHELPER支持连接字符串、事务、连接对象的Sql Server数据库处理类(对于类型的判断采用if语句)

  1 using System;
  2 using System.Data;
  3 using System.Data.SqlClient;
  4 using System.Collections;
  5 using System.Collections.Generic;
  6 
  7 namespace TaskWarning
  8 {
  9 
 10     /// <summary>
 11     /// SQLHelper类是提供用于高性能、可升级的sql数据操作
 12     /// </summary>
 13     public sealed class SqlHelper //: DBHelper
 14     {
 15         // 用于缓存参数的HASH表
 16         private readonly static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
 17 
 18         /// <summary>
 19         /// 使用事务、连接对象或连接字符串执行一个sql命令(不返回数据集)
 20         /// </summary>
 21         /// <remarks>
 22         ///举例:  
 23         ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, 
 24         ///                             "PublishOrders", new SqlParameter("@prodid", 24));
 25         /// </remarks>
 26         /// <param name="obj">事务、连接对象或连接字符串</param>
 27         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
 28         /// <param name="cmdText">存储过程名称或者sql语句</param>
 29         /// <param name="commandParameters">执行命令所用参数的集合</param>
 30         /// <returns>执行命令所影响的行数</returns>
 31         public static int ExecuteNonQuery(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 32         {
 33             SqlConnection con = new SqlConnection();
 34             SqlTransaction tran = null;
 35             if (obj.GetType() == typeof(string))
 36             {
 37                 con = new SqlConnection((obj as string));
 38             }
 39             if (obj.GetType() == typeof(SqlConnection))
 40             {
 41                 con = obj as SqlConnection;
 42             }
 43             if (obj.GetType() == typeof(SqlTransaction))
 44             {
 45                 con = (obj as SqlTransaction).Connection;
 46                 tran = (obj as SqlTransaction);
 47             }
 48             if (con == null)
 49             {
 50                 Exception err = new Exception("链接字符串配置错误!");
 51                 throw err;
 52             }
 53             SqlCommand cmd = new SqlCommand();
 54             PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
 55             int val = cmd.ExecuteNonQuery();
 56             cmd.Parameters.Clear();
 57             return val;
 58         }
 59 
 60         /// <summary>
 61         /// 使用事务、连接对象或连接字符串执行一个sql命令(不返回数据集)
 62         /// </summary>
 63         /// <remarks>
 64         ///举例:  
 65         ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, 
 66         ///                             "PublishOrders", new SqlParameter("@prodid", 24));
 67         /// </remarks>
 68         /// <param name="obj">事务、连接对象或连接字符串</param>
 69         /// <param name="cmdText">存储过程名称或者sql语句</param>
 70         /// <param name="commandParameters">执行命令所用参数的集合</param>
 71         /// <returns>执行命令所影响的行数</returns>
 72         public static int ExecuteNonQuery(object obj, string cmdText, params SqlParameter[] commandParameters)
 73         {
 74             SqlConnection con = new SqlConnection();
 75             SqlTransaction tran = null;
 76             if (obj.GetType() == typeof(string))
 77             {
 78                 con = new SqlConnection((obj as string));
 79             }
 80             if (obj.GetType() == typeof(SqlConnection))
 81             {
 82                 con = obj as SqlConnection;
 83             }
 84             if (obj.GetType() == typeof(SqlTransaction))
 85             {
 86                 con = (obj as SqlTransaction).Connection;
 87                 tran = (obj as SqlTransaction);
 88             }
 89             if (con == null)
 90             {
 91                 Exception err = new Exception("链接字符串配置错误!");
 92                 throw err;
 93             }
 94             SqlCommand cmd = new SqlCommand();
 95             PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
 96             int val = cmd.ExecuteNonQuery();
 97             cmd.Parameters.Clear();
 98             return val;
 99         }
100 
101         /// <summary>
102         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
103         /// </summary>
104         /// <remarks>
105         /// 举例:  
106         ///  SqlDataReader r = ExecuteReader(SqlConnection, CommandType.StoredProcedure, 
107         ///  "PublishOrders", new SqlParameter("@prodid", 24));
108         /// </remarks>
109         /// <param name="obj">事务、连接对象或连接字符串</param>
110         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
111         /// <param name="cmdText">存储过程名称或者sql语句</param>
112         /// <param name="commandParameters">执行命令所用参数的集合</param>
113         /// <returns>包含结果的读取器</returns>
114         public static SqlDataReader ExecuteReader(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
115         {
116             SqlConnection con = new SqlConnection();
117             SqlTransaction tran = null;
118             if (obj.GetType() == typeof(string))
119             {
120                 con = new SqlConnection((obj as string));
121             }
122             if (obj.GetType() == typeof(SqlConnection))
123             {
124                 con = obj as SqlConnection;
125             }
126             if (obj.GetType() == typeof(SqlTransaction))
127             {
128                 con = (obj as SqlTransaction).Connection;
129                 tran = (obj as SqlTransaction);
130             }
131             if (con == null)
132             {
133                 Exception err = new Exception("链接字符串配置错误!");
134                 throw err;
135             }
136             //创建一个SqlCommand对象
137             SqlCommand cmd = new SqlCommand();
138             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
139             //因此commandBehaviour.CloseConnection 就不会执行
140             try
141             {
142                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
143                 PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
144                 //调用 SqlCommand  的 ExecuteReader 方法
145                 SqlDataReader reader = cmd.ExecuteReader();
146                 //清除参数
147                 cmd.Parameters.Clear();
148                 return reader;
149             }
150             catch
151             {
152                 throw;
153             }
154         }
155 
156         /// <summary>
157         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
158         /// </summary>
159         /// <remarks>
160         /// 举例:  
161         ///  SqlDataReader r = ExecuteReader(SqlConnection, "PublishOrders", new SqlParameter("@prodid", 24));
162         /// </remarks>
163         /// <param name="obj">事务、连接对象或连接字符串</param>
164         /// <param name="cmdText">存储过程名称或者sql语句</param>
165         /// <param name="commandParameters">执行命令所用参数的集合</param>
166         /// <returns>包含结果的读取器</returns>
167         public static SqlDataReader ExecuteReader(object obj, string cmdText, params SqlParameter[] commandParameters)
168         {
169             SqlConnection con = new SqlConnection();
170             SqlTransaction tran = null;
171             if (obj.GetType() == typeof(string))
172             {
173                 con = new SqlConnection((obj as string));
174             }
175             if (obj.GetType() == typeof(SqlConnection))
176             {
177                 con = obj as SqlConnection;
178             }
179             if (obj.GetType() == typeof(SqlTransaction))
180             {
181                 con = (obj as SqlTransaction).Connection;
182                 tran = (obj as SqlTransaction);
183             }
184             if (con == null)
185             {
186                 Exception err = new Exception("链接字符串配置错误!");
187                 throw err;
188             }
189             //创建一个SqlCommand对象
190             SqlCommand cmd = new SqlCommand();
191             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
192             //因此commandBehaviour.CloseConnection 就不会执行
193             try
194             {
195                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
196                 PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
197                 //调用 SqlCommand  的 ExecuteReader 方法
198                 SqlDataReader reader = cmd.ExecuteReader();
199                 //清除参数
200                 cmd.Parameters.Clear();
201                 return reader;
202             }
203             catch
204             {
205                 throw;
206             }
207         }
208 
209 
210         /// <summary>
211         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
212         /// </summary>
213         /// <remarks>
214         /// 举例:  
215         ///  DataSet r = ExecuteDataSet(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
216         /// </remarks>
217         /// <param name="obj">事务、连接对象或连接字符串</param>
218         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
219         /// <param name="cmdText">存储过程名称或者sql语句</param>
220         /// <param name="commandParameters">执行命令所用参数的集合</param>
221         /// <returns>包含结果的读取器</returns>
222         public static DataSet ExecuteDataSet(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
223         {
224             SqlConnection con = new SqlConnection();
225             SqlTransaction tran = null;
226             if (obj.GetType() == typeof(string))
227             {
228                 con = new SqlConnection((obj as string));
229             }
230             if (obj.GetType() == typeof(SqlConnection))
231             {
232                 con = obj as SqlConnection;
233             }
234             if (obj.GetType() == typeof(SqlTransaction))
235             {
236                 con = (obj as SqlTransaction).Connection;
237                 tran = (obj as SqlTransaction);
238             }
239             if (con == null)
240             {
241                 Exception err = new Exception("链接字符串配置错误!");
242                 throw err;
243             }
244             //创建一个SqlCommand对象
245             SqlCommand cmd = new SqlCommand();
246             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,
247             //因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
248             //因此commandBehaviour.CloseConnection 就不会执行
249             try
250             {
251                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
252                 PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
253                 //调用 SqlCommand  的 ExecuteReader 方法
254                 SqlDataAdapter da = new SqlDataAdapter(cmd);
255                 DataSet ds = new DataSet();
256                 da.Fill(ds, "Table1");
257                 //清除参数
258                 cmd.Parameters.Clear();
259                 return ds;
260             }
261             catch
262             {
263                 //关闭连接,抛出异常
264                 throw;
265             }
266         }
267 
268 
269 
270         /// <summary>
271         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
272         /// </summary>
273         /// <remarks>
274         /// 举例:  
275         ///  DataSet r = ExecuteDataSet(trans, "PublishOrders", new SqlParameter("@prodid", 24));
276         /// </remarks>
277         /// <param name="obj">事务、连接对象或连接字符串</param>
278         /// <param name="cmdText">存储过程名称或者sql语句</param>
279         /// <param name="commandParameters">执行命令所用参数的集合</param>
280         /// <returns>包含结果的读取器</returns>
281         public static DataSet ExecuteDataSet(object obj, string cmdText, params SqlParameter[] commandParameters)
282         {
283             SqlConnection con = new SqlConnection();
284             SqlTransaction tran = null;
285             if (obj.GetType() == typeof(string))
286             {
287                 con = new SqlConnection((obj as string));
288             }
289             if (obj.GetType() == typeof(SqlConnection))
290             {
291                 con = obj as SqlConnection;
292             }
293             if (obj.GetType() == typeof(SqlTransaction))
294             {
295                 con = (obj as SqlTransaction).Connection;
296                 tran = (obj as SqlTransaction);
297             }
298             if (con == null)
299             {
300                 Exception err = new Exception("链接字符串配置错误!");
301                 throw err;
302             }
303             //创建一个SqlCommand对象
304             SqlCommand cmd = new SqlCommand();
305             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,
306             //因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
307             //因此commandBehaviour.CloseConnection 就不会执行
308             try
309             {
310                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
311                 PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
312                 //调用 SqlCommand  的 ExecuteReader 方法
313                 SqlDataAdapter da = new SqlDataAdapter(cmd);
314                 DataSet ds = new DataSet();
315                 da.Fill(ds, "Table1");
316                 //清除参数
317                 cmd.Parameters.Clear();
318                 return ds;
319             }
320             catch
321             {
322                 //关闭连接,抛出异常
323                 throw;
324             }
325         }
326 
327 
328         /// <summary>
329         /// 使用事务、连接对象或连接字符串执行一个sql命令并返回一个数据集的第一列
330         /// </summary>
331         /// <remarks>
332         /// 举例:  
333         ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
334         /// </remarks>
335         /// <param name="obj">事务、连接对象或连接字符串</param>
336         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
337         /// <param name="cmdText">存储过程名称或者sql语句</param>
338         /// <param name="commandParameters">执行命令所用参数的集合</param>
339         /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
340 
341         public static object ExecuteScalar(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
342         {
343             SqlConnection con = new SqlConnection();
344             SqlTransaction tran = null;
345             if (obj.GetType() == typeof(string))
346             {
347                 con = new SqlConnection((obj as string));
348             }
349             if (obj.GetType() == typeof(SqlConnection))
350             {
351                 con = obj as SqlConnection;
352             }
353             if (obj.GetType() == typeof(SqlTransaction))
354             {
355                 con = (obj as SqlTransaction).Connection;
356                 tran = (obj as SqlTransaction);
357             }
358             if (con == null)
359             {
360                 Exception err = new Exception("链接字符串配置错误!");
361                 throw err;
362             }
363             SqlCommand cmd = new SqlCommand();
364             PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
365             object val = cmd.ExecuteScalar();
366             cmd.Parameters.Clear();
367             return val;
368         }
369         public static object ExecuteScalar(object obj, string cmdText, params SqlParameter[] commandParameters)
370         {
371             SqlConnection con = new SqlConnection();
372             SqlTransaction tran = null;
373             if (obj.GetType() == typeof(string))
374             {
375                 con = new SqlConnection((obj as string));
376             }
377             if (obj.GetType() == typeof(SqlConnection))
378             {
379                 con = obj as SqlConnection;
380             }
381             if (obj.GetType() == typeof(SqlTransaction))
382             {
383                 con = (obj as SqlTransaction).Connection;
384                 tran = (obj as SqlTransaction);
385             }
386             if (con == null)
387             {
388                 Exception err = new Exception("链接字符串配置错误!");
389                 throw err;
390             }
391             SqlCommand cmd = new SqlCommand();
392             PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
393             object val = cmd.ExecuteScalar();
394             cmd.Parameters.Clear();
395             return val;
396         }
397 
398 
399         /// <summary>
400         /// 将参数集合添加到缓存
401         /// </summary>
402         /// <param name="cacheKey">添加到缓存的变量</param>
403         /// <param name="cmdParms">一个将要添加到缓存的sql参数集合</param>
404         public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
405         {
406             parmCache[cacheKey] = commandParameters;
407         }
408 
409         /// <summary>
410         /// 找回缓存参数集合
411         /// </summary>
412         /// <param name="cacheKey">用于找回参数的关键字</param>
413         /// <returns>缓存的参数集合</returns>
414         public static SqlParameter[] GetCachedParameters(string cacheKey)
415         {
416             SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
417 
418             if (cachedParms == null)
419                 return null;
420 
421             SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
422 
423             for (int i = 0, j = cachedParms.Length; i < j; i++)
424                 clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
425 
426             return clonedParms;
427         }
428 
429         /// <summary>
430         /// 准备执行一个命令
431         /// </summary>
432         /// <param name="cmd">sql命令</param>
433         /// <param name="conn">Sql连接</param>
434         /// <param name="trans">Sql事务</param>
435         /// <param name="cmdType">命令类型例如 存储过程或者文本</param>
436         /// <param name="cmdText">命令文本,例如:Select * from Products</param>
437         /// <param name="cmdParms">执行命令的参数</param>
438         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
439         {
440             if (conn.State != ConnectionState.Open)
441                 conn.Open();
442 
443             cmd.Connection = conn;
444             cmd.CommandText = cmdText;
445             //SqlParameterCollection aaa = new SqlParameterCollection();
446             //foreach (SqlParameterCollection cc in aaa)
447             //{
448             //    cmd.Parameters.Add(cc);
449             //}
450 
451             if (trans != null)
452                 cmd.Transaction = trans;
453 
454             cmd.CommandType = cmdType;
455 
456             if (cmdParms != null)
457             {
458                 foreach (SqlParameter parm in cmdParms)
459                     cmd.Parameters.Add(parm);
460             }
461         }
462 
463         /// <summary>
464         /// 通过SqlParameter类型的参数列表自动生成Insert语句
465         /// </summary>
466         /// <param name="tableName">要操作的表名</param>
467         /// <param name="cmdParms">SqlParameter类型的参数列表</param>
468         /// <returns>string 类型的 Insert 语句 </returns>
469         public static string BuilderInsert(string tableName, SqlParameter[] cmdParms)
470         {
471             //SqlParameter[] pars = new SqlParameter[]
472             //{
473             //    new SqlParameter("@asdf","asdf"),
474             //    new SqlParameter("@sf",1),
475             //    new SqlParameter("@af",Convert.ToDateTime("2012-01-01"))
476 
477             //};
478             string fieldsList = "";
479             string valuesList = "";
480             int i = 0;
481             foreach (SqlParameter pars in cmdParms)
482             {
483                 if (i != 0)
484                 {
485                     fieldsList = fieldsList + ",";
486                     valuesList = valuesList + ",";
487                 }
488                 fieldsList = String.Format("{0}{1}", fieldsList, pars.ParameterName.Substring(1));
489                 valuesList = String.Format("{0}{1}", valuesList, pars.ParameterName);
490                 i++;
491             }
492             return string.Format("Insert Into {0}({1}) Values ({2})", tableName, fieldsList, valuesList);
493         }
494 
495 
496         /// <summary>
497         /// 通过SqlParameter类型的参数列表自动生成Insert语句
498         /// </summary>
499         /// <param name="tableName">要操作的表名</param>
500         /// <param name="cmdParms">SqlParameter类型的参数列表</param>
501         /// <param name="conditions">SqlParameter类型的条件,用与Update语句的Where子句</param>
502         /// <returns>string 类型的 Update 语句 </returns>
503         public static string BuilderUpdate(string tableName, SqlParameter[] cmdParms, SqlParameter[] conditions)
504         {
505             string statement = "";
506             int i = 0;
507             foreach (SqlParameter pars in cmdParms)
508             {
509                 if (i != 0)
510                 {
511                     statement = statement + ",";
512                 }
513                 statement = String.Format("{0}{1}={2}", statement, pars.ParameterName.Substring(1),
514                                                     pars.ParameterName);
515                 i++;
516             }
517             string condition = "";
518             int j = 0;
519             foreach (SqlParameter pars in conditions)
520             {
521                 if (j != 0)
522                 {
523                     condition = condition + " and ";
524                 }
525                 condition = String.Format("{0}{1}={2}", condition, pars.ParameterName.Substring(1),
526                                                     pars.ParameterName);
527                 j++;
528             }
529             return string.Format("Update {0} Set {1} Where {2}", tableName, statement, condition);
530         }
531 
532 
533         /// <summary>
534         /// 生成update语句
535         /// </summary>
536         /// <param name="tableName">数据表名</param>
537         /// <param name="SrchStr">联合查询语句</param>
538         /// <param name="cmdParms">参数</param>
539         /// <param name="ConditionIndexs">条件参数索引</param>
540         /// <returns>返回一个update语句</returns>
541         public static string BuilderUpdate(string tableName, string SrchStr, SqlParameter[] cmdParms, int[] ConditionIndexs)
542         {
543             string statement = "";
544             for (int i = 0; i < cmdParms.Length; i++)
545             {
546                 if (ConditionIndexs != null && (ConditionIndexs as ICollection<int>).Contains(i))
547                     continue;
548                 if (!string.IsNullOrEmpty(statement)) statement = statement + ",";
549                 statement = String.Format("{0}{1}={2}", statement, cmdParms[i].ParameterName.Substring(1),
550                                                     cmdParms[i].ParameterName);
551             }
552             string condition = "";
553             for (int i = 0; ConditionIndexs != null && i < ConditionIndexs.Length; i++)
554             {
555                 int j = ConditionIndexs[i];
556                 if (!string.IsNullOrEmpty(condition))
557                 {
558                     condition = condition + " and ";
559                 }
560                 condition = String.Format("{0}{1}={2}", condition, cmdParms[j].ParameterName.Substring(1),
561                                                     cmdParms[j].ParameterName);
562                 j++;
563             }
564             if (!string.IsNullOrEmpty(SrchStr))
565             {
566                 SrchStr = SrchStr.Substring(SrchStr.IndexOf("from"));
567                 if (!string.IsNullOrEmpty(condition)) condition = "and " + condition;
568             }
569             else
570             {
571                 SrchStr = "where";
572                 if (string.IsNullOrEmpty(condition)) SrchStr = "";
573             }
574             return string.Format("Update {0} Set {1} {2} {3}", tableName, statement, SrchStr, condition);
575         }
576 
577 
578         /// <summary>
579         /// 生成Delete语句
580         /// </summary>
581         /// <param name="tableName">要删除数据的表名</param>
582         /// <param name="conditions">条件的参数集合</param>
583         /// <returns>返回一个delete语句</returns>
584         public static string BuilderDelete(string tableName, SqlParameter[] conditions)
585         {
586             //SqlParameter[] pars = new SqlParameter[]
587             //{
588             //    new SqlParameter("@asdf","asdf"),
589             //    new SqlParameter("@sf",1),
590             //    new SqlParameter("@af",Convert.ToDateTime("2012-01-01"))
591 
592             //};
593             string condition = "";
594             int i = 0;
595             foreach (SqlParameter pars in conditions)
596             {
597                 if (i != 0)
598                 {
599                     condition = condition + " and ";
600                 }
601                 condition = String.Format("{0}{1}={2}", condition, pars.ParameterName.Substring(1),
602                                                     pars.ParameterName);
603                 i++;
604             }
605             return string.Format("Delete From {0} where {1}", tableName, condition);
606         }
607 
608 
609 
610     }
611 }
View Code

对于类型的判断采用switch语句

  1 using System;
  2 using System.Data;
  3 using System.Data.SqlClient;
  4 using System.Collections;
  5 using System.Collections.Generic;
  6 
  7 namespace TaskWarning
  8 {
  9 
 10     /// <summary>
 11     /// SQLHelper类是提供用于高性能、可升级的sql数据操作
 12     /// </summary>
 13     public sealed class SqlHelper //: DBHelper
 14     {
 15         // 用于缓存参数的HASH表
 16         private readonly static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
 17 
 18         /// <summary>
 19         /// 使用事务、连接对象或连接字符串执行一个sql命令(不返回数据集)
 20         /// </summary>
 21         /// <remarks>
 22         ///举例:  
 23         ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, 
 24         ///                             "PublishOrders", new SqlParameter("@prodid", 24));
 25         /// </remarks>
 26         /// <param name="obj">事务、连接对象或连接字符串</param>
 27         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
 28         /// <param name="cmdText">存储过程名称或者sql语句</param>
 29         /// <param name="commandParameters">执行命令所用参数的集合</param>
 30         /// <returns>执行命令所影响的行数</returns>
 31         public static int ExecuteNonQuery(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 32         {
 33             SqlConnection con = new SqlConnection();
 34             SqlTransaction tran = null;
 35             Type type = obj.GetType();
 36             switch (type.FullName)
 37             {
 38                 case "System.String":
 39                     con = new SqlConnection((obj as string));
 40                     break;
 41                 case "System.Data.SqlClient.SqlConnection":
 42                     con = obj as SqlConnection;
 43                     break;
 44                 case "System.Data.SqlClient.SqlTransaction":
 45                     con = (obj as SqlTransaction).Connection;
 46                     tran = (obj as SqlTransaction);
 47                     break;
 48                 case "":
 49                 default:
 50                     Exception err = new Exception("参数错误:链接字符串配置错误!");
 51                     throw err;
 52             }
 53 
 54             SqlCommand cmd = new SqlCommand();
 55             PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
 56             int val = cmd.ExecuteNonQuery();
 57             cmd.Parameters.Clear();
 58             return val;
 59         }
 60 
 61         /// <summary>
 62         /// 使用事务、连接对象或连接字符串执行一个sql命令(不返回数据集)
 63         /// </summary>
 64         /// <remarks>
 65         ///举例:  
 66         ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, 
 67         ///                             "PublishOrders", new SqlParameter("@prodid", 24));
 68         /// </remarks>
 69         /// <param name="obj">事务、连接对象或连接字符串</param>
 70         /// <param name="cmdText">存储过程名称或者sql语句</param>
 71         /// <param name="commandParameters">执行命令所用参数的集合</param>
 72         /// <returns>执行命令所影响的行数</returns>
 73         public static int ExecuteNonQuery(object obj, string cmdText, params SqlParameter[] commandParameters)
 74         {
 75             SqlConnection con = new SqlConnection();
 76             SqlTransaction tran = null;
 77             Type type = obj.GetType();
 78             switch (type.FullName)
 79             {
 80                 case "System.String":
 81                     con = new SqlConnection((obj as string));
 82                     break;
 83                 case "System.Data.SqlClient.SqlConnection":
 84                     con = obj as SqlConnection;
 85                     break;
 86                 case "System.Data.SqlClient.SqlTransaction":
 87                     con = (obj as SqlTransaction).Connection;
 88                     tran = (obj as SqlTransaction);
 89                     break;
 90                 case "":
 91                 default:
 92                     Exception err = new Exception("参数错误:链接字符串配置错误!");
 93                     throw err;
 94             }
 95 
 96             SqlCommand cmd = new SqlCommand();
 97             PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
 98             int val = cmd.ExecuteNonQuery();
 99             cmd.Parameters.Clear();
100             return val;
101         }
102 
103         /// <summary>
104         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
105         /// </summary>
106         /// <remarks>
107         /// 举例:  
108         ///  SqlDataReader r = ExecuteReader(SqlConnection, CommandType.StoredProcedure, 
109         ///  "PublishOrders", new SqlParameter("@prodid", 24));
110         /// </remarks>
111         /// <param name="obj">事务、连接对象或连接字符串</param>
112         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
113         /// <param name="cmdText">存储过程名称或者sql语句</param>
114         /// <param name="commandParameters">执行命令所用参数的集合</param>
115         /// <returns>包含结果的读取器</returns>
116         public static SqlDataReader ExecuteReader(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
117         {
118             SqlConnection con = new SqlConnection();
119             SqlTransaction tran = null;
120             Type type = obj.GetType();
121             switch (type.FullName)
122             {
123                 case "System.String":
124                     con = new SqlConnection((obj as string));
125                     break;
126                 case "System.Data.SqlClient.SqlConnection":
127                     con = obj as SqlConnection;
128                     break;
129                 case "System.Data.SqlClient.SqlTransaction":
130                     con = (obj as SqlTransaction).Connection;
131                     tran = (obj as SqlTransaction);
132                     break;
133                 case "":
134                 default:
135                     Exception err = new Exception("参数错误:链接字符串配置错误!");
136                     throw err;
137             }
138             //创建一个SqlCommand对象
139             SqlCommand cmd = new SqlCommand();
140             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
141             //因此commandBehaviour.CloseConnection 就不会执行
142             try
143             {
144                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
145                 PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
146                 //调用 SqlCommand  的 ExecuteReader 方法
147                 SqlDataReader reader = cmd.ExecuteReader();
148                 //清除参数
149                 cmd.Parameters.Clear();
150                 return reader;
151             }
152             catch
153             {
154                 throw;
155             }
156         }
157 
158         /// <summary>
159         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
160         /// </summary>
161         /// <remarks>
162         /// 举例:  
163         ///  SqlDataReader r = ExecuteReader(SqlConnection, "PublishOrders", new SqlParameter("@prodid", 24));
164         /// </remarks>
165         /// <param name="obj">事务、连接对象或连接字符串</param>
166         /// <param name="cmdText">存储过程名称或者sql语句</param>
167         /// <param name="commandParameters">执行命令所用参数的集合</param>
168         /// <returns>包含结果的读取器</returns>
169         public static SqlDataReader ExecuteReader(object obj, string cmdText, params SqlParameter[] commandParameters)
170         {
171             SqlConnection con = new SqlConnection();
172             SqlTransaction tran = null;
173             Type type = obj.GetType();
174             switch (type.FullName)
175             {
176                 case "System.String":
177                     con = new SqlConnection((obj as string));
178                     break;
179                 case "System.Data.SqlClient.SqlConnection":
180                     con = obj as SqlConnection;
181                     break;
182                 case "System.Data.SqlClient.SqlTransaction":
183                     con = (obj as SqlTransaction).Connection;
184                     tran = (obj as SqlTransaction);
185                     break;
186                 case "":
187                 default:
188                     Exception err = new Exception("参数错误:链接字符串配置错误!");
189                     throw err;
190             }
191             //创建一个SqlCommand对象
192             SqlCommand cmd = new SqlCommand();
193             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
194             //因此commandBehaviour.CloseConnection 就不会执行
195             try
196             {
197                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
198                 PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
199                 //调用 SqlCommand  的 ExecuteReader 方法
200                 SqlDataReader reader = cmd.ExecuteReader();
201                 //清除参数
202                 cmd.Parameters.Clear();
203                 return reader;
204             }
205             catch
206             {
207                 throw;
208             }
209         }
210 
211 
212         /// <summary>
213         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
214         /// </summary>
215         /// <remarks>
216         /// 举例:  
217         ///  DataSet r = ExecuteDataSet(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
218         /// </remarks>
219         /// <param name="obj">事务、连接对象或连接字符串</param>
220         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
221         /// <param name="cmdText">存储过程名称或者sql语句</param>
222         /// <param name="commandParameters">执行命令所用参数的集合</param>
223         /// <returns>包含结果的读取器</returns>
224         public static DataSet ExecuteDataSet(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
225         {
226             SqlConnection con = new SqlConnection();
227             SqlTransaction tran = null;
228             Type type = obj.GetType();
229             switch (type.FullName)
230             {
231                 case "System.String":
232                     con = new SqlConnection((obj as string));
233                     break;
234                 case "System.Data.SqlClient.SqlConnection":
235                     con = obj as SqlConnection;
236                     break;
237                 case "System.Data.SqlClient.SqlTransaction":
238                     con = (obj as SqlTransaction).Connection;
239                     tran = (obj as SqlTransaction);
240                     break;
241                 case "":
242                 default:
243                     Exception err = new Exception("参数错误:链接字符串配置错误!");
244                     throw err;
245             }
246             //创建一个SqlCommand对象
247             SqlCommand cmd = new SqlCommand();
248             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,
249             //因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
250             //因此commandBehaviour.CloseConnection 就不会执行
251             try
252             {
253                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
254                 PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
255                 //调用 SqlCommand  的 ExecuteReader 方法
256                 SqlDataAdapter da = new SqlDataAdapter(cmd);
257                 DataSet ds = new DataSet();
258                 da.Fill(ds, "Table1");
259                 //清除参数
260                 cmd.Parameters.Clear();
261                 return ds;
262             }
263             catch
264             {
265                 //关闭连接,抛出异常
266                 throw;
267             }
268         }
269 
270 
271 
272         /// <summary>
273         /// 使用事务、连接对象或连接字符串执行一个sql命令(返回数据集)
274         /// </summary>
275         /// <remarks>
276         /// 举例:  
277         ///  DataSet r = ExecuteDataSet(trans, "PublishOrders", new SqlParameter("@prodid", 24));
278         /// </remarks>
279         /// <param name="obj">事务、连接对象或连接字符串</param>
280         /// <param name="cmdText">存储过程名称或者sql语句</param>
281         /// <param name="commandParameters">执行命令所用参数的集合</param>
282         /// <returns>包含结果的读取器</returns>
283         public static DataSet ExecuteDataSet(object obj, string cmdText, params SqlParameter[] commandParameters)
284         {
285             SqlConnection con = new SqlConnection();
286             SqlTransaction tran = null;
287             Type type = obj.GetType();
288             switch (type.FullName)
289             {
290                 case "System.String":
291                     con = new SqlConnection((obj as string));
292                     break;
293                 case "System.Data.SqlClient.SqlConnection":
294                     con = obj as SqlConnection;
295                     break;
296                 case "System.Data.SqlClient.SqlTransaction":
297                     con = (obj as SqlTransaction).Connection;
298                     tran = (obj as SqlTransaction);
299                     break;
300                 case "":
301                 default:
302                     Exception err = new Exception("参数错误:链接字符串配置错误!");
303                     throw err;
304             }
305             //创建一个SqlCommand对象
306             SqlCommand cmd = new SqlCommand();
307             //在这里我们用一个try/catch结构执行sql文本命令/存储过程,
308             //因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
309             //因此commandBehaviour.CloseConnection 就不会执行
310             try
311             {
312                 //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
313                 PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
314                 //调用 SqlCommand  的 ExecuteReader 方法
315                 SqlDataAdapter da = new SqlDataAdapter(cmd);
316                 DataSet ds = new DataSet();
317                 da.Fill(ds, "Table1");
318                 //清除参数
319                 cmd.Parameters.Clear();
320                 return ds;
321             }
322             catch
323             {
324                 //关闭连接,抛出异常
325                 throw;
326             }
327         }
328 
329 
330         /// <summary>
331         /// 使用事务、连接对象或连接字符串执行一个sql命令并返回一个数据集的第一列
332         /// </summary>
333         /// <remarks>
334         /// 举例:  
335         ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
336         /// </remarks>
337         /// <param name="obj">事务、连接对象或连接字符串</param>
338         /// <param name="cmdType">命令类型(存储过程,文本等)</param>
339         /// <param name="cmdText">存储过程名称或者sql语句</param>
340         /// <param name="commandParameters">执行命令所用参数的集合</param>
341         /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
342 
343         public static object ExecuteScalar(object obj, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
344         {
345             SqlConnection con = new SqlConnection();
346             SqlTransaction tran = null;
347             Type type = obj.GetType();
348             switch (type.FullName)
349             {
350                 case "System.String":
351                     con = new SqlConnection((obj as string));
352                     break;
353                 case "System.Data.SqlClient.SqlConnection":
354                     con = obj as SqlConnection;
355                     break;
356                 case "System.Data.SqlClient.SqlTransaction":
357                     con = (obj as SqlTransaction).Connection;
358                     tran = (obj as SqlTransaction);
359                     break;
360                 case "":
361                 default:
362                     Exception err = new Exception("参数错误:链接字符串配置错误!");
363                     throw err;
364             }
365             SqlCommand cmd = new SqlCommand();
366             PrepareCommand(cmd, con, tran, cmdType, cmdText, commandParameters);
367             object val = cmd.ExecuteScalar();
368             cmd.Parameters.Clear();
369             return val;
370         }
371         public static object ExecuteScalar(object obj, string cmdText, params SqlParameter[] commandParameters)
372         {
373             SqlConnection con = new SqlConnection();
374             SqlTransaction tran = null;
375             Type type = obj.GetType();
376             switch (type.FullName)
377             {
378                 case "System.String":
379                     con = new SqlConnection((obj as string));
380                     break;
381                 case "System.Data.SqlClient.SqlConnection":
382                     con = obj as SqlConnection;
383                     break;
384                 case "System.Data.SqlClient.SqlTransaction":
385                     con = (obj as SqlTransaction).Connection;
386                     tran = (obj as SqlTransaction);
387                     break;
388                 case "":
389                 default:
390                     Exception err = new Exception("参数错误:链接字符串配置错误!");
391                     throw err;
392             }
393 
394 
395             SqlCommand cmd = new SqlCommand();
396             PrepareCommand(cmd, con, tran, CommandType.Text, cmdText, commandParameters);
397             object val = cmd.ExecuteScalar();
398             cmd.Parameters.Clear();
399             return val;
400         }
401 
402 
403         /// <summary>
404         /// 将参数集合添加到缓存
405         /// </summary>
406         /// <param name="cacheKey">添加到缓存的变量</param>
407         /// <param name="cmdParms">一个将要添加到缓存的sql参数集合</param>
408         public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
409         {
410             parmCache[cacheKey] = commandParameters;
411         }
412 
413         /// <summary>
414         /// 找回缓存参数集合
415         /// </summary>
416         /// <param name="cacheKey">用于找回参数的关键字</param>
417         /// <returns>缓存的参数集合</returns>
418         public static SqlParameter[] GetCachedParameters(string cacheKey)
419         {
420             SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
421 
422             if (cachedParms == null)
423                 return null;
424 
425             SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
426 
427             for (int i = 0, j = cachedParms.Length; i < j; i++)
428                 clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
429 
430             return clonedParms;
431         }
432 
433         /// <summary>
434         /// 准备执行一个命令
435         /// </summary>
436         /// <param name="cmd">sql命令</param>
437         /// <param name="conn">Sql连接</param>
438         /// <param name="trans">Sql事务</param>
439         /// <param name="cmdType">命令类型例如 存储过程或者文本</param>
440         /// <param name="cmdText">命令文本,例如:Select * from Products</param>
441         /// <param name="cmdParms">执行命令的参数</param>
442         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
443         {
444             if (conn.State != ConnectionState.Open)
445                 conn.Open();
446 
447             cmd.Connection = conn;
448             cmd.CommandText = cmdText;
449             //SqlParameterCollection aaa = new SqlParameterCollection();
450             //foreach (SqlParameterCollection cc in aaa)
451             //{
452             //    cmd.Parameters.Add(cc);
453             //}
454 
455             if (trans != null)
456                 cmd.Transaction = trans;
457 
458             cmd.CommandType = cmdType;
459 
460             if (cmdParms != null)
461             {
462                 foreach (SqlParameter parm in cmdParms)
463                     cmd.Parameters.Add(parm);
464             }
465         }
466 
467         /// <summary>
468         /// 通过SqlParameter类型的参数列表自动生成Insert语句
469         /// </summary>
470         /// <param name="tableName">要操作的表名</param>
471         /// <param name="cmdParms">SqlParameter类型的参数列表</param>
472         /// <returns>string 类型的 Insert 语句 </returns>
473         public static string BuilderInsert(string tableName, SqlParameter[] cmdParms)
474         {
475             //SqlParameter[] pars = new SqlParameter[]
476             //{
477             //    new SqlParameter("@asdf","asdf"),
478             //    new SqlParameter("@sf",1),
479             //    new SqlParameter("@af",Convert.ToDateTime("2012-01-01"))
480 
481             //};
482             string fieldsList = "";
483             string valuesList = "";
484             int i = 0;
485             foreach (SqlParameter pars in cmdParms)
486             {
487                 if (i != 0)
488                 {
489                     fieldsList = fieldsList + ",";
490                     valuesList = valuesList + ",";
491                 }
492                 fieldsList = String.Format("{0}{1}", fieldsList, pars.ParameterName.Substring(1));
493                 valuesList = String.Format("{0}{1}", valuesList, pars.ParameterName);
494                 i++;
495             }
496             return string.Format("Insert Into {0}({1}) Values ({2})", tableName, fieldsList, valuesList);
497         }
498 
499 
500         /// <summary>
501         /// 通过SqlParameter类型的参数列表自动生成Insert语句
502         /// </summary>
503         /// <param name="tableName">要操作的表名</param>
504         /// <param name="cmdParms">SqlParameter类型的参数列表</param>
505         /// <param name="conditions">SqlParameter类型的条件,用与Update语句的Where子句</param>
506         /// <returns>string 类型的 Update 语句 </returns>
507         public static string BuilderUpdate(string tableName, SqlParameter[] cmdParms, SqlParameter[] conditions)
508         {
509             string statement = "";
510             int i = 0;
511             foreach (SqlParameter pars in cmdParms)
512             {
513                 if (i != 0)
514                 {
515                     statement = statement + ",";
516                 }
517                 statement = String.Format("{0}{1}={2}", statement, pars.ParameterName.Substring(1),
518                                                     pars.ParameterName);
519                 i++;
520             }
521             string condition = "";
522             int j = 0;
523             foreach (SqlParameter pars in conditions)
524             {
525                 if (j != 0)
526                 {
527                     condition = condition + " and ";
528                 }
529                 condition = String.Format("{0}{1}={2}", condition, pars.ParameterName.Substring(1),
530                                                     pars.ParameterName);
531                 j++;
532             }
533             return string.Format("Update {0} Set {1} Where {2}", tableName, statement, condition);
534         }
535 
536 
537         /// <summary>
538         /// 生成update语句
539         /// </summary>
540         /// <param name="tableName">数据表名</param>
541         /// <param name="SrchStr">联合查询语句</param>
542         /// <param name="cmdParms">参数</param>
543         /// <param name="ConditionIndexs">条件参数索引</param>
544         /// <returns>返回一个update语句</returns>
545         public static string BuilderUpdate(string tableName, string SrchStr, SqlParameter[] cmdParms, int[] ConditionIndexs)
546         {
547             string statement = "";
548             for (int i = 0; i < cmdParms.Length; i++)
549             {
550                 if (ConditionIndexs != null && (ConditionIndexs as ICollection<int>).Contains(i))
551                     continue;
552                 if (!string.IsNullOrEmpty(statement)) statement = statement + ",";
553                 statement = String.Format("{0}{1}={2}", statement, cmdParms[i].ParameterName.Substring(1),
554                                                     cmdParms[i].ParameterName);
555             }
556             string condition = "";
557             for (int i = 0; ConditionIndexs != null && i < ConditionIndexs.Length; i++)
558             {
559                 int j = ConditionIndexs[i];
560                 if (!string.IsNullOrEmpty(condition))
561                 {
562                     condition = condition + " and ";
563                 }
564                 condition = String.Format("{0}{1}={2}", condition, cmdParms[j].ParameterName.Substring(1),
565                                                     cmdParms[j].ParameterName);
566                 j++;
567             }
568             if (!string.IsNullOrEmpty(SrchStr))
569             {
570                 SrchStr = SrchStr.Substring(SrchStr.IndexOf("from"));
571                 if (!string.IsNullOrEmpty(condition)) condition = "and " + condition;
572             }
573             else
574             {
575                 SrchStr = "where";
576                 if (string.IsNullOrEmpty(condition)) SrchStr = "";
577             }
578             return string.Format("Update {0} Set {1} {2} {3}", tableName, statement, SrchStr, condition);
579         }
580 
581 
582         /// <summary>
583         /// 生成Delete语句
584         /// </summary>
585         /// <param name="tableName">要删除数据的表名</param>
586         /// <param name="conditions">条件的参数集合</param>
587         /// <returns>返回一个delete语句</returns>
588         public static string BuilderDelete(string tableName, SqlParameter[] conditions)
589         {
590             //SqlParameter[] pars = new SqlParameter[]
591             //{
592             //    new SqlParameter("@asdf","asdf"),
593             //    new SqlParameter("@sf",1),
594             //    new SqlParameter("@af",Convert.ToDateTime("2012-01-01"))
595 
596             //};
597             string condition = "";
598             int i = 0;
599             foreach (SqlParameter pars in conditions)
600             {
601                 if (i != 0)
602                 {
603                     condition = condition + " and ";
604                 }
605                 condition = String.Format("{0}{1}={2}", condition, pars.ParameterName.Substring(1),
606                                                     pars.ParameterName);
607                 i++;
608             }
609             return string.Format("Delete From {0} where {1}", tableName, condition);
610         }
611 
612 
613 
614     }
615 }
View Code

 

转载于:https://www.cnblogs.com/whisful/articles/6632881.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值