1 using JKTAC_LMIS.Entity;
2 using System;
3 using System.Collections;
4 using System.Collections.Generic;
5 using System.Configuration;
6 using System.Data;
7 using System.Data.SqlClient;
8 using System.Linq;
9 using System.Security.Cryptography;
10 using System.Text;
11 using System.Threading.Tasks;
12
13 namespace JKTAC_LMIS.DAL
14 {
15 public abstract class DbHelperSQL
16 {
17 public DbHelperSQL()
18 {
19
20 }
21 //定义连接字符串。
22 //protected static string ConnectionString = DecryptDBStr(ConfigurationManager.AppSettings["SQLConnectionString"], "zhangweilong");
23 protected static string ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
24 protected static SqlConnection Connection;
25 //定义数据库的打开和关闭方法
26 protected static void Open()
27 {
28 if (Connection == null)
29 {
30 Connection = new SqlConnection(ConnectionString);
31 }
32 if (Connection.State.Equals(ConnectionState.Closed))
33 {
34 Connection.Open();
35 }
36 }
37 protected static void Close()
38 {
39 if (Connection != null)
40 {
41 Connection.Close();
42 }
43 }
44 //判断用Sql查询的数据是否存在,true表示存在,False表示不存在
45 public static bool Exists(string strSql)
46 {
47 object obj = DbHelperSQL.GetSingle(strSql);
48 int cmdresult;
49 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
50 {
51 cmdresult = 0;
52 }
53 else
54 {
55 cmdresult = int.Parse(obj.ToString());
56 }
57 if (cmdresult == 0)
58 {
59 return false;
60 }
61 else
62 {
63 return true;
64 }
65 }
66 public static bool Exists(string strSql, params SqlParameter[] cmdParms)
67 {
68 object obj = DbHelperSQL.GetSingle(strSql, cmdParms);
69 int cmdresult;
70 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
71 {
72 cmdresult = 0;
73 }
74 else
75 {
76 cmdresult = int.Parse(obj.ToString());
77 }
78 if (cmdresult == 0)
79 {
80 return false;
81 }
82 else
83 {
84 return true;
85 }
86 }
87 //返回SqlDataReader数据集,使用完后记得关闭SqlDataReader
88 public static SqlDataReader GetDataReader(string SqlString)
89 {
90 try
91 {
92 Open();
93 SqlCommand cmd = new SqlCommand(SqlString, Connection);
94 return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
95 }
96 catch (System.Data.SqlClient.SqlException ex)
97 {
98 throw new Exception(ex.Message);
99 }
100 }
101 // 公有方法,获取数据,返回一个DataSet。
102 public static DataSet GetDataSet(string SqlString)
103 {
104 using (SqlConnection connection = new SqlConnection(ConnectionString))
105 {
106 connection.Open();
107 using (SqlCommand cmd = new SqlCommand(SqlString, connection))
108 {
109 using (SqlDataAdapter da = new SqlDataAdapter(cmd))
110 {
111 DataSet ds = new DataSet();
112 try
113 {
114 da.Fill(ds, "ds");
115 cmd.Parameters.Clear();
116 }
117 catch (System.Data.SqlClient.SqlException ex)
118 {
119 throw new Exception(ex.Message);
120 }
121 return ds;
122 }
123 }
124 }
125 }
126 // 公有方法,获取数据,返回一个DataTable。
127 public static DataTable GetDataTable(string SqlString)
128 {
129 DataSet dataset = GetDataSet(SqlString);
130 return dataset.Tables[0];
131 }
132 // 公有方法,获取数据,返回首行首列。
133 public static string GetSHSL(string SqlString)
134 {
135 DataSet dataset = GetDataSet(SqlString);
136 if (dataset.Tables[0].Rows.Count > 0)
137 {
138 return Convert.ToString(dataset.Tables[0].Rows[0][0].ToString());
139 }
140 else
141 {
142 return "";
143 }
144 }
145 // 公有方法,获取数据,返回首行首列的INT值。
146 public static string GetSHSLInt(string SqlString)
147 {
148 DataSet dataset = GetDataSet(SqlString);
149 if (dataset.Tables[0].Rows.Count > 0)
150 {
151 return Convert.ToString(dataset.Tables[0].Rows[0][0].ToString());
152 }
153 else
154 {
155 return "0";
156 }
157 }
158 // 公有方法,获取数据,返回一个DataRow。
159 public static DataRow GetDataRow(string SqlString)
160 {
161 DataSet dataset = GetDataSet(SqlString);
162 if (dataset.Tables[0].Rows.Count > 0)
163 {
164 return dataset.Tables[0].Rows[0];
165 }
166 else
167 {
168 return null;
169 }
170 }
171 // 公有方法,执行Sql语句。对Update、Insert、Delete为影响到的行数,其他情况为-1
172 public static int ExecuteSQL(String SqlString, Hashtable MyHashTb)
173 {
174 int count = -1;
175 Open();
176 try
177 {
178 SqlCommand cmd = new SqlCommand(SqlString, Connection);
179 foreach (DictionaryEntry item in MyHashTb)
180 {
181 string[] CanShu = item.Key.ToString().Split('|');
182 if (CanShu[1].ToString().Trim() == "string")
183 {
184 cmd.Parameters.Add(CanShu[0], SqlDbType.VarChar);
185 }
186 else if (CanShu[1].ToString().Trim() == "int")
187 {
188 cmd.Parameters.Add(CanShu[0], SqlDbType.Int);
189 }
190 else if (CanShu[1].ToString().Trim() == "text")
191 {
192 cmd.Parameters.Add(CanShu[0], SqlDbType.Text);
193 }
194 else if (CanShu[1].ToString().Trim() == "datetime")
195 {
196 cmd.Parameters.Add(CanShu[0], SqlDbType.DateTime);
197 }
198 else
199 {
200 cmd.Parameters.Add(CanShu[0], SqlDbType.VarChar);
201 }
202 cmd.Parameters[CanShu[0]].Value = item.Value.ToString();
203 }
204 count = cmd.ExecuteNonQuery();
205 }
206 catch
207 {
208 count = -1;
209 }
210 finally
211 {
212 Close();
213 }
214 return count;
215 }
216 // 公有方法,执行Sql语句。对Update、Insert、Delete为影响到的行数,其他情况为-1
217 public static int ExecuteSQL(String SqlString)
218 {
219 int count = -1;
220 Open();
221 try
222 {
223 SqlCommand cmd = new SqlCommand(SqlString, Connection);
224 count = cmd.ExecuteNonQuery();
225 }
226 catch
227 {
228 count = -1;
229 }
230 finally
231 {
232 Close();
233 }
234 return count;
235 }
236 // 公有方法,执行一组Sql语句。返回是否成功,采用事务管理,发现异常时回滚数据
237 public static bool ExecuteSQL(string[] SqlStrings)
238 {
239 bool success = true;
240 Open();
241 SqlCommand cmd = new SqlCommand();
242 SqlTransaction trans = Connection.BeginTransaction();
243 cmd.Connection = Connection;
244 cmd.Transaction = trans;
245 try
246 {
247 foreach (string str in SqlStrings)
248 {
249 cmd.CommandText = str;
250 cmd.ExecuteNonQuery();
251 }
252 trans.Commit();
253 }
254 catch
255 {
256 success = false;
257 trans.Rollback();
258 }
259 finally
260 {
261 Close();
262 }
263 return success;
264 }
265 // Trans
266 public static bool ExecuteSqlByTrans(List<SqlAndPrams> list)
267 {
268 bool success = true;
269 Open();
270 SqlCommand cmd = new SqlCommand();
271 SqlTransaction trans = Connection.BeginTransaction();
272 cmd.Connection = Connection;
273 cmd.Transaction = trans;
274 try
275 {
276 foreach (SqlAndPrams item in list)
277 {
278 if (item.cmdParms==null)
279 {
280 cmd.CommandText = item.sql;
281 cmd.ExecuteNonQuery();
282 }
283 else
284 {
285 cmd.CommandText = item.sql;
286 cmd.CommandType = CommandType.Text;//cmdType;
287 cmd.Parameters.Clear();
288 foreach (SqlParameter parameter in item.cmdParms)
289 {
290 if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
291 (parameter.Value == null))
292 {
293 parameter.Value = DBNull.Value;
294 }
295 cmd.Parameters.Add(parameter);
296 }
297 cmd.ExecuteNonQuery();
298 }
299
300 }
301 trans.Commit();
302 }
303 catch(Exception e)
304 {
305 success = false;
306 trans.Rollback();
307 }
308 finally
309 {
310 Close();
311 }
312 return success;
313 }
314 // 执行一条计算查询结果语句,返回查询结果(object)。
315 public static object GetSingle(string SQLString)
316 {
317 using (SqlConnection connection = new SqlConnection(ConnectionString))
318 {
319 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
320 {
321 try
322 {
323 connection.Open();
324 object obj = cmd.ExecuteScalar();
325 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
326 {
327 return null;
328 }
329 else
330 {
331 return obj;
332 }
333 }
334 catch (System.Data.SqlClient.SqlException e)
335 {
336 connection.Close();
337 throw e;
338 }
339 }
340 }
341 }
342 public static object GetSingle(string SQLString, int Times)
343 {
344 using (SqlConnection connection = new SqlConnection(ConnectionString))
345 {
346 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
347 {
348 try
349 {
350 connection.Open();
351 cmd.CommandTimeout = Times;
352 object obj = cmd.ExecuteScalar();
353 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
354 {
355 return null;
356 }
357 else
358 {
359 return obj;
360 }
361 }
362 catch (System.Data.SqlClient.SqlException e)
363 {
364 connection.Close();
365 throw e;
366 }
367 }
368 }
369 }
370 public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
371 {
372 using (SqlConnection connection = new SqlConnection(ConnectionString))
373 {
374 using (SqlCommand cmd = new SqlCommand())
375 {
376 try
377 {
378 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
379 object obj = cmd.ExecuteScalar();
380 cmd.Parameters.Clear();
381 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
382 {
383 return null;
384 }
385 else
386 {
387 return obj;
388 }
389 }
390 catch (System.Data.SqlClient.SqlException e)
391 {
392 throw e;
393 }
394 }
395 }
396 }
397 // 执行SQL语句,返回影响的记录数
398 public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
399 {
400 using (SqlConnection connection = new SqlConnection(ConnectionString))
401 {
402 using (SqlCommand cmd = new SqlCommand())
403 {
404 try
405 {
406 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
407 int rows = cmd.ExecuteNonQuery();
408 cmd.Parameters.Clear();
409 return rows;
410 }
411 catch (System.Data.SqlClient.SqlException e)
412 {
413 throw e;
414 }
415 }
416 }
417 }
418 //执行查询语句,返回DataSet
419 public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
420 {
421 using (SqlConnection connection = new SqlConnection(ConnectionString))
422 {
423 SqlCommand cmd = new SqlCommand();
424 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
425 using (SqlDataAdapter da = new SqlDataAdapter(cmd))
426 {
427 DataSet ds = new DataSet();
428 try
429 {
430 da.Fill(ds, "ds");
431 cmd.Parameters.Clear();
432 }
433 catch (System.Data.SqlClient.SqlException ex)
434 {
435 throw new Exception(ex.Message);
436 }
437 return ds;
438 }
439 }
440 }
441 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
442 {
443 if (conn.State == ConnectionState.Open)
444 conn.Close();
445 if (conn.State != ConnectionState.Open)
446 conn.Open();
447 cmd.Connection = conn;
448 cmd.CommandText = cmdText;
449 if (trans != null)
450 cmd.Transaction = trans;
451 cmd.CommandType = CommandType.Text;//cmdType;
452 if (cmdParms != null)
453 {
454
455
456 foreach (SqlParameter parameter in cmdParms)
457 {
458 if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
459 (parameter.Value == null))
460 {
461 parameter.Value = DBNull.Value;
462 }
463 cmd.Parameters.Add(parameter);
464 }
465 }
466 }
467
468 #region 执行存储过程 Add by LQB 2014-12-18
469 public static object RunProcedure(string storedProcName, IDataParameter[] paramenters)
470 {
471 using (SqlConnection connection = new SqlConnection(ConnectionString))
472 {
473 connection.Open();
474 SqlCommand command = BuildQueryCommand(connection, storedProcName, paramenters);
475 object obj = command.ExecuteNonQuery();
476 //object obj = command.Parameters["@Output_Value"].Value; //@Output_Value和具体的存储过程参数对应
477 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
478 {
479 return null;
480 }
481 else
482 {
483 return obj;
484 }
485 }
486 }
487
488 private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
489 {
490 SqlCommand command = new SqlCommand(storedProcName, connection);
491 command.CommandType = CommandType.StoredProcedure;
492 foreach (SqlParameter parameter in parameters)
493 {
494 if (parameter != null)
495 {
496 // 检查未分配值的输出参数,将其分配以DBNull.Value.
497 if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
498 (parameter.Value == null))
499 {
500 parameter.Value = DBNull.Value;
501 }
502 command.Parameters.Add(parameter);
503 }
504 }
505
506 return command;
507 }
508 #endregion
509 }
510 }