自定义 SqlHelp

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data.SqlClient;
  4 using System.Data;
  5 using System.Configuration;
  6 using System.Reflection;
  7 using System.Collections;
  8 namespace DataHelp
  9 {
 10     #region ADO.NET 访问数据库辅助类 +SqlHelp
 11     //Author:兵兵 +SqlHelp
 12     public class SqlHelp
 13     {
 14         /// <summary>
 15         /// DB连接字符串
 16         /// </summary>
 17         public static readonly string DB= ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
 18 
 19 
 20         #region ExecuteDataReader +ExecuteDataReader(string cmdText, List<SqlParameter> parameters,string connString)
 21         /// <summary>
 22         /// ExecuteDataReader(执行有参存储过程)
 23         /// </summary>
 24         /// <param name="cmdText">存储过程名称</param>
 25         /// <param name="parameters">参数列表</param>
 26         /// <param name="connString">连接字符串</param>
 27         /// <returns>SqlDataReader对象</returns>
 28         public static SqlDataReader ExecuteDataReader(string cmdText, List<SqlParameter> parameters, string connString)
 29         {
 30             SqlConnection conn = new SqlConnection(connString);
 31             SqlCommand cmd = new SqlCommand();
 32             CommandBuilder(cmdText, cmd, conn, parameters);
 33             SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
 34             cmd.Parameters.Clear();
 35             return reader;
 36 
 37         }
 38         #endregion
 39 
 40         #region ExecuteDataReader +ExecuteDataReader(string cmdText,string connString)
 41         /// <summary>
 42         /// ExecuteDataReader(执行无参存储过程)
 43         /// </summary>
 44         /// <param name="cmdText">存储过程</param>
 45         /// <param name="connString">连接字符串</param>
 46         /// <returns>SqlDataReader对象</returns>
 47         public static SqlDataReader ExecuteDataReader(string cmdText, string connString)
 48         {
 49 
 50             SqlConnection conn = new SqlConnection(connString);
 51             SqlCommand cmd = new SqlCommand();
 52             CommandBuilder(cmdText, cmd, conn);
 53             SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
 54             cmd.Parameters.Clear();
 55             return reader;
 56 
 57         }
 58         #endregion
 59 
 60         #region ExecuteNonQuery +ExecuteNonQuery(string cmdText, List<SqlParameter> parameters, string connString)
 61         /// <summary>
 62         /// ExecuteNonQuery(执行有参存储过程)
 63         /// </summary>
 64         /// <param name="cmdText">存储过程名称</param>
 65         /// <param name="parameters">参数列表</param>
 66         /// <param name="connString">连接字符串</param>
 67         /// <returns>数据库受影响的行数</returns>
 68         public static int ExecuteNonQuery(string cmdText, List<SqlParameter> parameters, string connString)
 69         {
 70             using (SqlConnection conn = new SqlConnection(connString))
 71             {
 72                 SqlCommand cmd = new SqlCommand();
 73                 CommandBuilder(cmdText, cmd, conn, parameters);
 74                 int result = cmd.ExecuteNonQuery();
 75                 cmd.Parameters.Clear();
 76                 return result;
 77             }
 78         }
 79         #endregion
 80 
 81         #region ExecuteNonQuery +ExecuteNonQuery(string cmdText, string connString)
 82         /// <summary>
 83         /// ExecuteNonQuery(执行无参存储过程)
 84         /// </summary>
 85         /// <param name="cmdText">存储过程名称</param>
 86         /// <param name="connString">连接字符串</param>
 87         /// <returns>数据库受影响的行数</returns>
 88         public static int ExecuteNonQuery(string cmdText, string connString)
 89         {
 90 
 91             using (SqlConnection conn = new SqlConnection(connString))
 92             {
 93                 SqlCommand cmd = new SqlCommand();
 94                 CommandBuilder(cmdText, cmd, conn);
 95                 int result = cmd.ExecuteNonQuery();
 96                 cmd.Parameters.Clear();
 97                 return result;
 98             }
 99 
100 
101         }
102         #endregion
103 
104         #region ExecuteScalar +ExecuteScalar(string cmdText, List<SqlParameter> parameters, string connString)
105         /// <summary>
106         /// ExecuteScalar(执行有参存储过程)
107         /// </summary>
108         /// <param name="cmdText">存储过程名称</param>
109         /// <param name="parameters">参数列表</param>
110         /// <param name="connString">连接字符串</param>
111         /// <returns>object</returns>
112         public static object ExecuteScalar(string cmdText, List<SqlParameter> parameters, string connString)
113         {
114 
115             using (SqlConnection conn = new SqlConnection(connString))
116             {
117                 SqlCommand cmd = new SqlCommand();
118                 CommandBuilder(cmdText, cmd, conn, parameters);
119                 object o = cmd.ExecuteScalar();
120                 cmd.Parameters.Clear();
121                 return o;
122             }
123 
124 
125         }
126         #endregion
127 
128         #region ExecuteScalar +ExecuteScalar(string cmdText, string connString)
129         /// <summary>
130         /// ExecuteScalar(执行无参存储过程)
131         /// </summary>
132         /// <param name="cmdText">存储过程名称</param>
133         /// <param name="connString">连接字符串</param>
134         /// <returns>object</returns>
135         public static object ExecuteScalar(string cmdText, string connString)
136         {
137 
138             using (SqlConnection conn = new SqlConnection(connString))
139             {
140                 SqlCommand cmd = new SqlCommand();
141                 CommandBuilder(cmdText, cmd, conn);
142                 object o = cmd.ExecuteScalar();
143                 cmd.Parameters.Clear();
144                 return o;
145             }
146 
147 
148         }
149         #endregion
150 
151         #region ExecuteDataTable +ExecuteDataTable(string cmdText, List<SqlParameter> parameters, string connString)
152         /// <summary>
153         /// ExecuteDataTable(用适配器执行有参存储过程)
154         /// </summary>
155         /// <param name="cmdText">存储过程名称</param>
156         /// <param name="parameters">参数列表</param>
157         /// <param name="connString">连接字符串</param>
158         /// <returns>DataTable</returns>
159         public static DataTable ExecuteDataTable(string cmdText, List<SqlParameter> parameters, string connString)
160         {
161 
162             using (SqlConnection conn = new SqlConnection(connString))
163             {
164                 SqlDataAdapter da = new SqlDataAdapter(cmdText, conn);
165                 //命令类型为存储过程
166                 da.DeleteCommand.CommandType = CommandType.StoredProcedure;
167                 da.SelectCommand.Parameters.AddRange(parameters.ToArray());
168                 DataTable dt = new DataTable();
169                 da.Fill(dt);
170                 return dt;
171             }
172 
173 
174         }
175         #endregion
176 
177         #region ExecuteDataTable +ExecuteDataTable(string cmdText, string connString)
178         /// <summary>
179         /// ExecuteDataTable(用适配器执行无参存储过程)
180         /// </summary>
181         /// <param name="cmdText">存储过程名称</param>
182         /// <param name="connString">连接字符串</param>
183         /// <returns>DataTable</returns>
184         public static DataTable ExecuteDataTable(string cmdText, string connString)
185         {
186 
187             using (SqlConnection conn = new SqlConnection(connString))
188             {
189                 SqlDataAdapter da = new SqlDataAdapter(cmdText, conn);
190                 //命令类型为存储过程
191                 da.DeleteCommand.CommandType = CommandType.StoredProcedure;
192                 DataTable dt = new DataTable();
193                 da.Fill(dt);
194                 return dt;
195             }
196         }
197         #endregion
198 
199         #region ExecuteDataTableProc(命令+适配器) +ExecuteDataTableProc(string cmdText, List<SqlParameter> parameters, string connString)
200         /// <summary>
201         /// ExecuteDataTableProc(执行有参存储过程)
202         /// </summary>
203         /// <param name="cmdText">存储过程名称</param>
204         /// <param name="parameters">参数列表</param>
205         /// <param name="connString">连接字符串</param>
206         /// <returns>DataTable</returns>
207         public static DataTable ExecuteDataTableProc(string cmdText, List<SqlParameter> parameters, string connString)
208         /// <summary>
209         {
210 
211             using (SqlConnection conn = new SqlConnection(connString))
212             {
213                 SqlCommand cmd = new SqlCommand();
214                 CommandBuilder(cmdText, cmd, conn, parameters);
215                 SqlDataAdapter adapter = new SqlDataAdapter(cmd);
216                 DataTable dt = new DataTable();
217                 adapter.Fill(dt);
218                 cmd.Parameters.Clear();
219                 return dt;
220 
221             }
222 
223         }
224         #endregion
225 
226         #region ExecuteDataTableProc(命令+适配器) +ExecuteDataTableProc(string cmdText, string connString)
227         /// <summary>
228         /// ExecuteDataTableProc(执行无参存储过程)
229         /// </summary>
230         /// <param name="parameters">参数列表</param>
231         /// <param name="connString">连接字符串</param>
232         /// <returns>DataTable</returns>
233         public static DataTable ExecuteDataTableProc(string cmdText, string connString)
234         {
235 
236             using (SqlConnection conn = new SqlConnection(connString))
237             {
238                 SqlCommand cmd = new SqlCommand();
239                 CommandBuilder(cmdText, cmd, conn);
240                 SqlDataAdapter adapter = new SqlDataAdapter(cmd);
241                 DataTable dt = new DataTable();
242                 adapter.Fill(dt);
243                 cmd.Parameters.Clear();
244                 return dt;
245 
246             }
247 
248         }
249         #endregion
250 
251         #region 准备命令对象 -CommandBuilder(string cmdText, SqlCommand cmd, SqlConnection conn, List<SqlParameter> parameters)
252         /// <summary>
253         /// 准备命令对象(执行有参存储过程)
254         /// </summary>
255         /// <param name="cmdText">存储过程名称</param>
256         /// <param name="cmd">命令对象</param>
257         /// <param name="conn">连接对象</param>
258         /// <param name="parameters">参数列表</param>
259         private static void CommandBuilder(string cmdText, SqlCommand cmd, SqlConnection conn, List<SqlParameter> parameters)
260         {
261 
262             if (conn.State == System.Data.ConnectionState.Closed)
263                 conn.Open();
264             cmd.Connection = conn;
265             cmd.CommandText = cmdText;
266             cmd.CommandType = System.Data.CommandType.StoredProcedure;
267             if (parameters.Count > 0)
268                 cmd.Parameters.AddRange(parameters.ToArray());
269 
270         }
271         #endregion
272 
273         #region 准备命令对象 -CommandBuilder(string cmdText, SqlCommand cmd, SqlConnection conn)
274         /// <summary>
275         /// 准备命令对象(执行无参存储过程)
276         /// </summary>
277         /// <param name="cmdText">存储过程名称</param>
278         /// <param name="cmd">命令对象</param>
279         /// <param name="conn">连接对象</param>
280         private static void CommandBuilder(string cmdText, SqlCommand cmd, SqlConnection conn)
281         {
282 
283             if (conn.State == System.Data.ConnectionState.Closed)
284                 conn.Open();
285             cmd.Connection = conn;
286             cmd.CommandText = cmdText;
287             cmd.CommandType = System.Data.CommandType.StoredProcedure;
288 
289         }
290         #endregion
291 
292         #region 批插入 void BulkInsert( DataTable dt, string tableName, string connStr)
293         /// <summary>
294         /// 批插入 void BulkInsert( DataTable dt, string tableName, string connStr)
295         /// </summary>
296         /// <param name="dt">所有数据的表格</param>
297         /// <param name="tableName">表名</param>
298         public static int BulkInsert(DataTable dt, string tableName, string connStr)
299         {
300             int result = -1;
301             if (string.IsNullOrEmpty(tableName))
302                 throw new Exception("请指定你要插入的表名");
303             var count = dt.Rows.Count;
304             if (count == 0)
305                 return result;
306             SqlTransaction sqlBulkTran = null;
307             try
308             {
309                 using (SqlConnection conn = new SqlConnection(connStr))
310                 {
311                     if (conn.State == System.Data.ConnectionState.Closed)
312                         conn.Open();
313                     sqlBulkTran = conn.BeginTransaction();
314                     using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, sqlBulkTran))
315                     {
316                         copy.DestinationTableName = tableName;//指定目标表
317                         copy.WriteToServer(dt);//将dt中的所有行复制到SqlBulkCopy对象的DestinationTableName指定的目标表中
318                         if (sqlBulkTran != null)
319                         {
320                             sqlBulkTran.Commit();
321                         }
322                         result = 1;
323                     }
324 
325                 }
326 
327             }
328             catch (Exception)
329             {
330                 if (sqlBulkTran != null)
331                 {
332                     sqlBulkTran.Rollback();
333                 }
334             }
335             finally
336             {
337                 sqlBulkTran = null;
338             }
339 
340             return result;
341         }
342         #endregion
343 
344          
345     }
346     #endregion
347 }
348 #region list 扩展方法 Author:高兵兵
349 public static class IListUtil
350 {
351     /// <summary>
352     /// 将集合类转换成DataTable 
353     /// </summary>
354     /// <param name="list">集合</param>
355     /// <returns></returns>
356     public static DataTable AsDataTable<T>(this IList<T> list)
357     {
358         DataTable result = new DataTable();
359         if (list.Count > 0)
360         {
361             PropertyInfo[] propertys = typeof(T).GetProperties();
362             foreach (PropertyInfo pi in propertys)
363             {
364                 result.Columns.Add(pi.Name, pi.PropertyType);
365             }
366 
367             for (int i = 0; i < list.Count; i++)
368             {
369                 ArrayList tempList = new ArrayList();
370                 foreach (var item in propertys)
371                 {
372                     object obj = item.GetValue(list[i], null);
373                     tempList.Add(obj);
374                 }
375 
376                 object[] array = tempList.ToArray();
377                 result.LoadDataRow(array, true);
378             }
379         }
380         return result;
381     }
382 
383 
384 }
385 #endregion
原文地址:https://www.cnblogs.com/gaobing/p/3878342.html