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