SqlHelper.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace TimedUpload.Util
  10. {
  11. class SqlHelper
  12. {
  13. /// <summary>
  14. ///
  15. /// </summary>
  16. /// <param name="configConnStrKey">XmlConfig 中 database.config 数据库连接key</param>
  17. public SqlHelper(string configConnStrKey)
  18. {
  19. connStr = ConfigurationManager.AppSettings[configConnStrKey];
  20. }
  21. //连接字符串
  22. private readonly string connStr;
  23. //private static readonly string connStr = ConfigurationManager.ConnectionStrings["PipeNetworkDb"].ConnectionString;
  24. ////IP地址
  25. //private static String SqlServerId = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlServerId"), "WWKJ");
  26. ////用户名
  27. //private static String SqlUserId = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlUserId"), "WWKJ");
  28. ////用户密码
  29. //private static String PassWord = Wujian_Jm.C_DesDecrypt(GetConfigValue("PassWord"), "WWKJ");
  30. //数据库名
  31. //private static String DbaseName = GetConfigValue("DbaseName");
  32. //拼接链接字符串
  33. // private static readonly string connStrN = "data source=" + SqlServerId + ";initial catalog=" + DbaseName + ";user id=" + SqlUserId + ";password=" + PassWord + ";";
  34. //1.执行insert/delete/update的方法
  35. #region 配置文件字段的读取函数
  36. public string GetConfigValue(string key)
  37. {
  38. string value = "";
  39. try
  40. {
  41. //string assemblyConfigFile = Assembly.GetEntryAssembly().Location;
  42. //Configuration config = ConfigurationManager.OpenExeConfiguration(assemblyConfigFile);
  43. //AppSettingsSection app = config.AppSettings;
  44. //value = app.Settings[key].Value;
  45. return null;
  46. }
  47. catch
  48. {
  49. return value;
  50. }
  51. }
  52. public int ExecuteNonQuery(string sql, CommandType cmdType, params SqlParameter[] pms)
  53. {
  54. using (SqlConnection con = new SqlConnection(connStr))
  55. {
  56. using (SqlCommand cmd = new SqlCommand(sql, con))
  57. {
  58. //设置当前执行的是存储过程还是带参数的Sql语句
  59. cmd.CommandType = cmdType;
  60. if (pms != null)
  61. {
  62. cmd.Parameters.AddRange(pms);
  63. }
  64. try
  65. {
  66. con.Open();
  67. return cmd.ExecuteNonQuery();
  68. }
  69. catch
  70. {
  71. con.Close();
  72. con.Dispose();
  73. throw;
  74. }
  75. }
  76. }
  77. }
  78. #endregion
  79. public int ExecuteNoQuery(string sql, params SqlParameter[] parameters)
  80. {
  81. using (SqlConnection conn = new SqlConnection(connStr))
  82. {
  83. using (SqlCommand cmd = conn.CreateCommand())
  84. {
  85. cmd.CommandText = sql;
  86. if (parameters != null)
  87. {
  88. conn.Open();
  89. foreach (SqlParameter parameter in parameters)
  90. {
  91. cmd.Parameters.Add(parameter);
  92. }
  93. }
  94. return cmd.ExecuteNonQuery();
  95. }
  96. }
  97. }
  98. //带事物的执行语句
  99. public int ExecuteNoQueryWithTransaction(string sql, CommandType cmdType, params SqlParameter[] param)
  100. {
  101. int num = 0;
  102. using (SqlConnection conn = new SqlConnection(connStr))
  103. {
  104. conn.Open();
  105. SqlTransaction tran = conn.BeginTransaction();
  106. try
  107. {
  108. using (SqlCommand cmd = conn.CreateCommand())
  109. {
  110. cmd.CommandText = sql;
  111. cmd.CommandType = cmdType;
  112. cmd.Transaction = tran;
  113. if (param != null)
  114. {
  115. cmd.Parameters.AddRange(param);
  116. }
  117. //conn.Open();
  118. num = cmd.ExecuteNonQuery();
  119. tran.Commit(); //提交事物
  120. }
  121. }
  122. catch
  123. {
  124. tran.Rollback(); //事物回滚
  125. }
  126. }
  127. return num;
  128. }
  129. //2.执行返回单个值的方法
  130. public object ExecuteScalar(string sql, CommandType cmdType, params SqlParameter[] pms)
  131. {
  132. ////IP地址
  133. //String SqlServerIP = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlServerId"), "WWKJ");
  134. ////用户名
  135. //String userId = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlUserId"), "WWKJ");
  136. ////用户密码
  137. //String pwd = Wujian_Jm.C_DesDecrypt(GetConfigValue("PassWord"), "WWKJ");
  138. ////数据库名
  139. //String dbName = GetConfigValue("DbaseName");
  140. ////拼接链接字符串
  141. //string connStrNew = "data source=" + SqlServerIP + ";initial catalog=" + dbName + ";user id=" + userId + ";password=" + pwd + ";";
  142. using (SqlConnection con = new SqlConnection(connStr))
  143. {
  144. using (SqlCommand cmd = new SqlCommand(sql, con))
  145. {
  146. cmd.Parameters.Clear();
  147. //设置当前执行的是存储过程还是带参数的Sql语句
  148. cmd.CommandType = cmdType;
  149. if (pms != null)
  150. {
  151. cmd.Parameters.AddRange(pms);
  152. }
  153. con.Open();
  154. Object value = cmd.ExecuteScalar();
  155. cmd.Parameters.Clear();
  156. return value;
  157. }
  158. }
  159. }
  160. //3.返回SqlDataReader的方法
  161. public SqlDataReader ExecuteReader(string sql, CommandType cmdType, params SqlParameter[] pms)
  162. {
  163. SqlConnection con = new SqlConnection(connStr);
  164. using (SqlCommand cmd = new SqlCommand(sql, con))
  165. {
  166. cmd.CommandType = cmdType;
  167. if (pms != null)
  168. {
  169. cmd.Parameters.AddRange(pms);
  170. }
  171. try
  172. {
  173. con.Open();
  174. SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); //修改 刘学铸 by 2017-06-02
  175. cmd.Parameters.Clear();
  176. return dr;//cmd.ExecuteReader(CommandBehavior.CloseConnection);
  177. }
  178. catch
  179. {
  180. con.Close();
  181. con.Dispose();
  182. throw;
  183. }
  184. }
  185. }
  186. //4.返回DataTable
  187. public DataTable ExecuteDataTable(string sql, CommandType cmdType, params SqlParameter[] pms)
  188. {
  189. try
  190. {
  191. DataTable dt = new DataTable();
  192. using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connStr))
  193. {
  194. //清空参数集合
  195. adapter.SelectCommand.Parameters.Clear();
  196. adapter.SelectCommand.CommandType = cmdType;
  197. if (pms != null)
  198. {
  199. adapter.SelectCommand.Parameters.AddRange(pms);
  200. }
  201. adapter.Fill(dt);
  202. return dt;
  203. }
  204. }
  205. catch (Exception ex)
  206. {
  207. return null;
  208. }
  209. }
  210. /// <summary>
  211. /// 执行sql语句无参数
  212. /// </summary>
  213. public int ExecuteNoParams(string sql, CommandType cmdType)
  214. {
  215. using (SqlConnection conn = new SqlConnection(connStr))
  216. {
  217. using (SqlCommand cmd = new SqlCommand(sql, conn))
  218. {
  219. cmd.CommandType = cmdType;
  220. try
  221. {
  222. conn.Open();
  223. return cmd.ExecuteNonQuery();
  224. }
  225. catch (Exception)
  226. {
  227. conn.Close();
  228. throw;
  229. }
  230. }
  231. }
  232. }
  233. /// <summary>
  234. /// 判断表是否存在
  235. /// </summary>
  236. /// <param name="tableName"></param>
  237. /// <returns></returns>
  238. public bool DBTableIsExists(string tableName)
  239. {
  240. return ExecuteDataTable("select * from sysobjects where name='" + tableName + "'", CommandType.Text, null).Rows.Count > 0;
  241. }
  242. /// <summary>
  243. /// 带事务的存储过程
  244. /// </summary>
  245. /// <param name="procName">存储过程名称</param>
  246. /// <param name="parameters">存储过程参数-不能为空</param>
  247. /// <returns>0:执行成功 异常抛出</returns>
  248. public int ExecStoredProcedure(string procName, params SqlParameter[] parameters)
  249. {
  250. int rtn = 0;
  251. using (SqlConnection conn = new SqlConnection(connStr))
  252. {
  253. using (SqlCommand cmd = conn.CreateCommand())
  254. {
  255. SqlTransaction st = conn.BeginTransaction();
  256. cmd.Transaction = st;
  257. try
  258. {
  259. cmd.CommandText = procName;
  260. cmd.CommandType = CommandType.StoredProcedure;
  261. cmd.Parameters.AddRange(parameters);
  262. conn.Open();
  263. rtn = cmd.ExecuteNonQuery();
  264. st.Commit();
  265. cmd.Parameters.Clear();//修改 刘学铸 at 2017-07-13
  266. return rtn;
  267. }
  268. catch (SqlException sqlex)
  269. {
  270. st.Rollback();
  271. throw sqlex;
  272. }
  273. }
  274. }
  275. }
  276. /// <summary>
  277. /// 带输出参数的存储过程
  278. /// </summary>
  279. /// <param name="procName"></param>
  280. /// <param name="param"></param>
  281. /// <returns></returns>
  282. public object ExecStoredPro(string procName, string name, params SqlParameter[] paras)
  283. {
  284. int rtn = 0;
  285. using (SqlConnection conn = new SqlConnection(connStr))
  286. {
  287. using (SqlCommand cmd = conn.CreateCommand())
  288. {
  289. SqlTransaction st = conn.BeginTransaction();
  290. cmd.Transaction = st;
  291. try
  292. {
  293. cmd.CommandText = procName;
  294. cmd.CommandType = CommandType.StoredProcedure;
  295. cmd.Parameters.AddRange(paras);
  296. conn.Open();
  297. rtn = cmd.ExecuteNonQuery();
  298. st.Commit();
  299. return cmd.Parameters[name].Value; //返回输出参数
  300. }
  301. catch (SqlException sqlex)
  302. {
  303. st.Rollback();
  304. throw sqlex;
  305. }
  306. //finally
  307. //{
  308. // cmd.Parameters.Clear();//修改 刘学铸 at 2017-07-13
  309. //}
  310. }
  311. }
  312. }
  313. /// <summary>
  314. /// 带输出参数的存储过程
  315. /// </summary>
  316. /// <param name="procName"></param>
  317. /// <param name="param"></param>
  318. /// <returns></returns>
  319. public void ExecStoredPro1(string procName, params SqlParameter[] paras)
  320. {
  321. int rtn = 0;
  322. using (SqlConnection conn = new SqlConnection(connStr))
  323. {
  324. using (SqlCommand cmd = conn.CreateCommand())
  325. {
  326. //SqlTransaction st = conn.BeginTransaction();
  327. //cmd.Transaction = st;
  328. try
  329. {
  330. cmd.CommandText = procName;
  331. cmd.CommandType = CommandType.StoredProcedure;
  332. cmd.Parameters.AddRange(paras);
  333. conn.Open();
  334. rtn = cmd.ExecuteNonQuery();
  335. //st.Commit();
  336. //return cmd.Parameters[name].Value; //返回输出参数
  337. }
  338. catch (SqlException sqlex)
  339. {
  340. //st.Rollback();
  341. throw sqlex;
  342. }
  343. finally
  344. {
  345. cmd.Parameters.Clear();//修改 刘学铸 at 2017-07-13
  346. if (conn != null) conn.Close();
  347. }
  348. }
  349. }
  350. }
  351. /// <summary>
  352. /// 存储过程返回DataTable
  353. /// </summary>
  354. /// <param name="procName"></param>
  355. /// <param name="paras"></param>
  356. /// <returns></returns>
  357. public DataTable ExecProcedureDatatable(string procName, params SqlParameter[] paras)
  358. {
  359. DataTable dt = new DataTable();
  360. using (SqlConnection conn = new SqlConnection(connStr))
  361. {
  362. using (SqlCommand cmd = conn.CreateCommand())
  363. {
  364. SqlDataAdapter adapter = new SqlDataAdapter();
  365. adapter.SelectCommand = cmd;
  366. cmd.CommandText = procName;
  367. cmd.CommandType = CommandType.StoredProcedure;
  368. cmd.Parameters.Clear();
  369. if (paras != null)
  370. {
  371. foreach (SqlParameter parameter in paras)
  372. {
  373. cmd.Parameters.Add(parameter);
  374. }
  375. }
  376. conn.Open();
  377. try
  378. {
  379. //执行
  380. adapter.Fill(dt);
  381. }
  382. catch (System.Data.Common.DbException ex)
  383. {
  384. //PublicUtility.HandException("DbBase.cs", ex);
  385. }
  386. finally
  387. {
  388. //关闭连接
  389. cmd.Parameters.Clear();
  390. if (conn != null) conn.Close();
  391. }
  392. //return dt;
  393. }
  394. }
  395. return dt;
  396. }
  397. /// <summary>
  398. /// 分页查询
  399. /// </summary>
  400. /// <param name="strSql">查询sql</param>
  401. /// <param name="dbParameter">查询参数</param>
  402. /// <param name="orderField">排序字段</param>
  403. /// <param name="isAsc">排序方式</param>
  404. /// <param name="pageSize">显示的页数</param>
  405. /// <param name="pageIndex">当前页数</param>
  406. /// <param name="total">总共条数</param>
  407. /// <returns></returns>
  408. public DataTable ExecuteDataTable(string strSql, string orderField, bool isAsc, int pageSize, int pageIndex, out int total, params SqlParameter[] parameter)
  409. {
  410. using (SqlConnection dbConnection = new SqlConnection(connStr))
  411. {
  412. StringBuilder sb = new StringBuilder();
  413. if (pageIndex == 0)
  414. {
  415. pageIndex = 1;
  416. }
  417. int num = (pageIndex - 1) * pageSize;
  418. int num1 = (pageIndex) * pageSize;
  419. string OrderBy = "";
  420. if (!string.IsNullOrEmpty(orderField))
  421. {
  422. if (orderField.ToUpper().IndexOf("ASC") + orderField.ToUpper().IndexOf("DESC") > 0)
  423. {
  424. //OrderBy = "Order By " + orderField ;
  425. OrderBy = "Order By " + orderField;
  426. }
  427. else
  428. {
  429. //OrderBy = "Order By " + orderField + " " + (isAsc ? "ASC" : "DESC");
  430. OrderBy = "Order By " + orderField + " " + (isAsc ? "ASC" : "DESC");
  431. }
  432. }
  433. else
  434. {
  435. OrderBy = "order by (select 0)";
  436. }
  437. sb.Append("Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")");
  438. sb.Append(" As rowNum, * From (" + strSql + ") As T ) As N Where rowNum > " + num + " And rowNum <= " + num1 + "");
  439. total = Convert.ToInt32(ExecuteScalar("Select Count(1) From (" + strSql + ") As t", CommandType.Text, parameter));
  440. //total = Convert.ToInt32(new DbHelper(dbConnection).ExecuteScalar(CommandType.Text, "Select Count(1) From (" + strSql + ") As t", dbParameter));
  441. //var IDataReader = new DbHelper(dbConnection).ExecuteReader(CommandType.Text, sb.ToString(), dbParameter);
  442. //return ConvertExtension.IDataReaderToList<T>(IDataReader);
  443. return ExecuteDataTable(sb.ToString(), CommandType.Text, parameter);
  444. }
  445. }
  446. /// <summary>
  447. /// 分页查询
  448. /// </summary>
  449. /// <param name="strSql">查询sql</param>
  450. /// <param name="dbParameter">查询参数</param>
  451. /// <param name="orderField">排序字段</param>
  452. /// <param name="isAsc">排序方式</param>
  453. /// <param name="pageSize">每页行数</param>
  454. /// <param name="pageIndex">当前页数</param>
  455. /// <param name="total">总共条数</param>
  456. /// <returns></returns>
  457. public DataTable ExecuteDataTable(string strSql, string orderField, string isAsc, int pageSize, int pageIndex, out int total, params SqlParameter[] parameter)
  458. {
  459. using (SqlConnection dbConnection = new SqlConnection(connStr))
  460. {
  461. StringBuilder sb = new StringBuilder();
  462. if (pageIndex == 0)
  463. {
  464. pageIndex = 1;
  465. }
  466. int num = (pageIndex - 1) * pageSize;
  467. int num1 = (pageIndex) * pageSize;
  468. string OrderBy = "";
  469. if (!string.IsNullOrEmpty(orderField))
  470. {
  471. if (orderField.ToUpper().IndexOf("ASC") + orderField.ToUpper().IndexOf("DESC") > 0)
  472. {
  473. OrderBy = "Order By " + orderField;
  474. }
  475. else
  476. {
  477. OrderBy = "Order By " + orderField + " " + isAsc;
  478. }
  479. }
  480. else
  481. {
  482. OrderBy = "order by (select 0)";
  483. }
  484. sb.Append("Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")");
  485. sb.Append(" As rowNum, * From (" + strSql + ") As T ) As N Where rowNum > " + num + " And rowNum <= " + num1 + "");
  486. total = Convert.ToInt32(ExecuteScalar("Select Count(1) From (" + strSql + ") As t", CommandType.Text, parameter));
  487. //total = Convert.ToInt32(new DbHelper(dbConnection).ExecuteScalar(CommandType.Text, "Select Count(1) From (" + strSql + ") As t", dbParameter));
  488. //var IDataReader = new DbHelper(dbConnection).ExecuteReader(CommandType.Text, sb.ToString(), dbParameter);
  489. //return ConvertExtension.IDataReaderToList<T>(IDataReader);
  490. return ExecuteDataTable(sb.ToString(), CommandType.Text, parameter);
  491. }
  492. }
  493. #region 返回 sqlDataReader
  494. public SqlDataReader ReturnSqlDataReader(String sql)
  495. {
  496. SqlConnection conn = new SqlConnection(connStr);
  497. SqlCommand cmd = new SqlCommand(sql, conn);
  498. conn.Open();
  499. try
  500. {
  501. SqlDataReader reader = cmd.ExecuteReader();
  502. return reader;
  503. }
  504. catch (Exception ex)
  505. {
  506. conn.Close();
  507. throw ex;
  508. }
  509. }
  510. #endregion
  511. public int ScalarToInt(string sql)
  512. {
  513. return Convert.ToInt32(ExecuteScalar(sql, CommandType.Text, null));
  514. }
  515. public int Query(string sql)
  516. {
  517. return ExecuteNonQuery(sql, CommandType.Text, null);
  518. }
  519. public DataTable ExecuteDataTable(String sql)
  520. {
  521. return this.ExecuteDataTable(sql, CommandType.Text, null);
  522. }
  523. public Int32 QueryTran(String sql)
  524. {
  525. Int32 num = 0;
  526. using (SqlConnection con = new SqlConnection(connStr))
  527. {
  528. using (SqlCommand cmd = con.CreateCommand())
  529. {
  530. con.Open();
  531. SqlTransaction st = con.BeginTransaction();
  532. cmd.Transaction = st;
  533. //设置当前执行的是存储过程还是带参数的Sql语句
  534. cmd.CommandText = sql;
  535. cmd.CommandType = CommandType.Text;
  536. try
  537. {
  538. num = cmd.ExecuteNonQuery();
  539. st.Commit();
  540. }
  541. catch
  542. {
  543. st.Rollback();
  544. con.Close();
  545. con.Dispose();
  546. }
  547. }
  548. }
  549. return num;
  550. }
  551. }
  552. }