一、SQL Server

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

相关文章: