You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1309 lines
51 KiB

2 weeks ago
  1. using NFine.Code;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Data.Common;
  7. using System.Data.SqlClient;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Net;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace NFine.Data.Extensions
  14. {
  15. /// <summary>
  16. /// 数据库访问辅助类,add by ngye, on 2013-08-14.
  17. /// </summary>
  18. public static class SqlHelper
  19. {
  20. #region [ 连接串相关 ]
  21. /// <summary>
  22. /// 数据中心DB的连接字符串
  23. /// </summary>
  24. public static string DataCenterConnString = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
  25. /// <summary>
  26. /// 获取同步服务器的连接
  27. /// </summary>
  28. /// <returns></returns>
  29. public static SqlConnection GetDataCenterConn()
  30. {
  31. return new SqlConnection(DataCenterConnString);
  32. }
  33. /// <summary>
  34. /// 根据连接串获取连接
  35. /// </summary>
  36. /// <returns></returns>
  37. public static SqlConnection GetConnByString(string conn)
  38. {
  39. return new SqlConnection(conn);
  40. }
  41. /// <summary>
  42. /// 测试连接串是否能正确
  43. /// </summary>
  44. /// <param name="connectionString">连接串</param>
  45. /// <returns></returns>
  46. public static bool TestConnectionString(string connectionString)
  47. {
  48. bool result = true;
  49. try
  50. {
  51. using (SqlConnection conn = GetConnByString(connectionString))
  52. {
  53. try
  54. {
  55. conn.Open();
  56. }
  57. catch (Exception ex)
  58. {
  59. result = false;
  60. }
  61. }
  62. }
  63. catch (Exception)
  64. {
  65. result = false;
  66. }
  67. return result;
  68. }
  69. /// <summary>
  70. /// 测试连接串是否正确
  71. /// </summary>
  72. /// <param name="connectionString">连接串</param>
  73. /// <param name="timeOut">测试的超时秒数</param>
  74. /// <param name="errInfo">错误时输出的错误信息</param>
  75. /// <returns>是否能正常连接</returns>
  76. public static bool TestConnectionString(string connectionString, int timeOut, ref string errInfo)
  77. {
  78. bool result = true;
  79. string[] arr = connectionString.Split(new char[] { ';' });
  80. List<string> list = new List<string>();
  81. foreach (string s in arr)
  82. {
  83. if (s.ToLower().IndexOf("timeout") == -1)
  84. {
  85. list.Add(s);
  86. }
  87. else
  88. {
  89. list.Add(String.Format("Connection Timeout={0}", timeOut));
  90. }
  91. }
  92. SqlConnection con = null;
  93. try
  94. {
  95. con = new SqlConnection(string.Join(";", list.ToArray()));
  96. con.Open();
  97. }
  98. catch (Exception ex)
  99. {
  100. result = false;
  101. errInfo = ex.Message;
  102. }
  103. finally
  104. {
  105. if (con != null)
  106. {
  107. con.Close();
  108. con.Dispose();
  109. con = null;
  110. }
  111. }
  112. return result;
  113. }
  114. #endregion
  115. #region [ 超时设置 ]
  116. public static int CommandTimeout
  117. {
  118. get
  119. {
  120. return 7200;
  121. }
  122. }
  123. #endregion
  124. #region [ ExecuteNonQuery ]
  125. /// <summary>
  126. /// 根据sql语句和参数,返回受影响行数
  127. /// </summary>
  128. /// <param name="sql">sql语句</param>
  129. /// <param name="spArr">可变参数</param>
  130. /// <returns>受影响行数</returns>
  131. public static int ExecuteNonQuery(string sql, params SqlParameter[] spArr)
  132. {
  133. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  134. {
  135. conn.Open();
  136. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  137. if (spArr.Length > 0)
  138. cmd.Parameters.AddRange(spArr.SetDBNull());
  139. return cmd.ExecuteNonQuery();
  140. }
  141. }
  142. public static int ExecuteNonQuery(string connStr,string sql, params SqlParameter[] spArr)
  143. {
  144. using (SqlConnection conn = new SqlConnection(connStr))
  145. {
  146. conn.Open();
  147. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  148. if (spArr.Length > 0)
  149. cmd.Parameters.AddRange(spArr.SetDBNull());
  150. return cmd.ExecuteNonQuery();
  151. }
  152. }
  153. /// <summary>
  154. /// 根据sql语句和参数,返回DataTable
  155. /// </summary>
  156. /// <param name="sql">sql语句</param>
  157. /// <param name="spArr">可变参数</param>
  158. /// <returns>DataTable</returns>
  159. public static DataTable GetDataTableBySql(string connStr, string sql, params SqlParameter[] spArr)
  160. {
  161. using (SqlConnection conn = new SqlConnection(connStr))
  162. {
  163. conn.Open();
  164. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  165. if (spArr.Length > 0)
  166. cmd.Parameters.AddRange(spArr.SetDBNull());
  167. DataTable dt = cmd.ExecuteDataTable();
  168. return dt;
  169. }
  170. }
  171. public static DataTable FindTablePageBySql_OtherTempSORRFQ(string strSql, string TempName, string Droptable, DbParameter[] parameters, ref Pagination Pagination)
  172. {
  173. string orderField = Pagination.sidx;
  174. string orderType = Pagination.sord;
  175. int pageIndex = Pagination.page;
  176. int pageSize = Pagination.rows;
  177. int totalRow = Pagination.records;
  178. DataTable dt = GetPageTable_EXISTSTempSORRFQ(strSql, TempName, Droptable, parameters, orderField, orderType, pageIndex, pageSize, ref totalRow);
  179. Pagination.records = totalRow;
  180. return dt;
  181. }
  182. private static DataTable GetPageTable_EXISTSTempSORRFQ(string sql, string sqlTempName, string Droptable, DbParameter[] param, string orderField, string orderType, int pageIndex, int pageSize, ref int count)
  183. {
  184. //StringBuilder strSql = new StringBuilder();
  185. if (pageIndex == 0)
  186. {
  187. pageIndex = 1;
  188. }
  189. int num = (pageIndex - 1) * pageSize;
  190. int num1 = (pageIndex) * pageSize;
  191. string OrderBy = " order by ITEMCODE desc ";
  192. //if (!string.IsNullOrEmpty(orderField))
  193. // OrderBy = "Order By " + orderField + " " + orderType + "";
  194. //else
  195. // OrderBy = "order by (select 0)";
  196. //strSql.Append(sql+@" Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")");
  197. //strSql.Append(" As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " " + Droptable);
  198. //count = Convert.ToInt32(ExecuteScalar(CommandType.Text, sql + " Select Count(1) From " + sqlTempName +" "+ Droptable, param));
  199. //IDataReader dr = ExecuteReader(CommandType.Text, strSql.ToString(), param);
  200. //return DatabaseReader.ReaderToDataTable(dr);
  201. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  202. {
  203. conn.Open();
  204. sql += " Select Count(1) From " + sqlTempName;
  205. sql += " Select * From (Select ROW_NUMBER() Over (" + OrderBy + ") ";
  206. sql += " As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " ";
  207. sql += Droptable;
  208. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  209. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  210. DataSet ds = new DataSet();
  211. adapter.Fill(ds);
  212. string ss = ds.Tables[1].Rows[0][0].ToString();
  213. count = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
  214. return ds.Tables[0];
  215. }
  216. }
  217. public static DataTable FindTablePageBySql_OtherTempSORRFQbyChan(string strSql, string TempName, string Droptable, DbParameter[] parameters, ref Pagination Pagination)
  218. {
  219. string orderField = Pagination.sidx;
  220. string orderType = Pagination.sord;
  221. int pageIndex = Pagination.page;
  222. int pageSize = Pagination.rows;
  223. int totalRow = Pagination.records;
  224. DataTable dt = GetPageTable_EXISTSTempSORRFQbyChan(strSql, TempName, Droptable, parameters, orderField, orderType, pageIndex, pageSize, ref totalRow);
  225. Pagination.records = totalRow;
  226. return dt;
  227. }
  228. //多语句一起事务中执行(Li编写)
  229. public static int CmdExecuteNonQueryLi(string sql, params SqlParameter[] spArr)
  230. {
  231. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  232. {
  233. conn.Open();
  234. SqlTransaction sqlTran = conn.BeginTransaction();
  235. SqlCommand cmd = new SqlCommand();
  236. cmd.Transaction = sqlTran;
  237. cmd.Connection = conn;
  238. try
  239. {
  240. cmd.CommandText = sql;
  241. int RES = cmd.ExecuteNonQuery();
  242. cmd.Transaction.Commit();
  243. return RES;
  244. }
  245. catch (Exception ex)
  246. {
  247. cmd.Transaction.Rollback();
  248. throw new Exception(ex.Message);
  249. }
  250. finally
  251. {
  252. if (conn.State != ConnectionState.Closed)
  253. {
  254. conn.Close();
  255. conn.Dispose();
  256. }
  257. }
  258. return 0;
  259. }
  260. }
  261. private static DataTable GetPageTable_EXISTSTempSORRFQbyChan(string sql, string sqlTempName, string Droptable, DbParameter[] param, string orderField, string orderType, int pageIndex, int pageSize, ref int count)
  262. {
  263. //StringBuilder strSql = new StringBuilder();
  264. if (pageIndex == 0)
  265. {
  266. pageIndex = 1;
  267. }
  268. int num = (pageIndex - 1) * pageSize;
  269. int num1 = (pageIndex) * pageSize;
  270. string OrderBy = " order by 物料编码 desc ";
  271. //if (!string.IsNullOrEmpty(orderField))
  272. // OrderBy = "Order By " + orderField + " " + orderType + "";
  273. //else
  274. // OrderBy = "order by (select 0)";
  275. //strSql.Append(sql+@" Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")");
  276. //strSql.Append(" As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " " + Droptable);
  277. //count = Convert.ToInt32(ExecuteScalar(CommandType.Text, sql + " Select Count(1) From " + sqlTempName +" "+ Droptable, param));
  278. //IDataReader dr = ExecuteReader(CommandType.Text, strSql.ToString(), param);
  279. //return DatabaseReader.ReaderToDataTable(dr);
  280. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  281. {
  282. conn.Open();
  283. sql += " Select Count(1) From " + sqlTempName;
  284. sql += " Select * From (Select ROW_NUMBER() Over (" + OrderBy + ") ";
  285. sql += " As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " ";
  286. sql += Droptable;
  287. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  288. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  289. DataSet ds = new DataSet();
  290. adapter.Fill(ds);
  291. string ss = ds.Tables[1].Rows[0][0].ToString();
  292. count = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
  293. return ds.Tables[0];
  294. }
  295. }
  296. #endregion
  297. #region [ ExecuteScalar_ForProc ]
  298. /// <summary>
  299. /// 根据存储过程和参数,返回Scalar结果
  300. /// </summary>
  301. /// <param name="proc">存储过程</param>
  302. /// <param name="spArr">可变参数</param>
  303. /// <returns>object</returns>
  304. public static object ExecuteScalar_ForProc(string proc, params SqlParameter[] spArr)
  305. {
  306. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  307. {
  308. conn.Open();
  309. SqlCommand cmd = new SqlCommand(proc, conn).AddTimeout();
  310. cmd.CommandType = CommandType.StoredProcedure;
  311. if (spArr.Length > 0)
  312. cmd.Parameters.AddRange(spArr.SetDBNull());
  313. object obj = cmd.ExecuteScalar();
  314. return obj;
  315. }
  316. }
  317. /// <summary>
  318. /// 根据存储过程和参数,返回Scalar结果,但不加上超时设置 ( 避免循环做 AddTimeout )
  319. /// </summary>
  320. /// <param name="proc">存储过程</param>
  321. /// <param name="spArr">可变参数</param>
  322. /// <returns>object</returns>
  323. public static object ExecuteScalar_ForProc_WithoutAddTimeout(string proc, params SqlParameter[] spArr)
  324. {
  325. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  326. {
  327. conn.Open();
  328. SqlCommand cmd = new SqlCommand(proc, conn);
  329. cmd.CommandType = CommandType.StoredProcedure;
  330. if (spArr.Length > 0)
  331. cmd.Parameters.AddRange(spArr.SetDBNull());
  332. object obj = cmd.ExecuteScalar();
  333. return obj;
  334. }
  335. }
  336. #endregion
  337. #region [ ExecuteScalar ]
  338. /// <summary>
  339. /// 根据sql语句和参数,返回Scalar结果
  340. /// </summary>
  341. /// <param name="sql">sql语句</param>
  342. /// <param name="spArr">可变参数</param>
  343. /// <returns>object</returns>
  344. public static object ExecuteScalar(string sql, params SqlParameter[] spArr)
  345. {
  346. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  347. {
  348. conn.Open();
  349. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  350. if (spArr.Length > 0)
  351. cmd.Parameters.AddRange(spArr.SetDBNull());
  352. object obj = cmd.ExecuteScalar();
  353. return obj;
  354. }
  355. }
  356. #endregion
  357. #region [ QueryByProc ]
  358. /// <summary>
  359. /// 根据存储过程及参数,返回DataSet
  360. /// </summary>
  361. /// <returns>DataSet</returns>
  362. public static DataSet GetDataSetByProc(string proc, params SqlParameter[] spArr)
  363. {
  364. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  365. {
  366. conn.Open();
  367. SqlCommand cmd = new SqlCommand(proc, conn).AddTimeout();
  368. cmd.CommandType = CommandType.StoredProcedure;
  369. if (spArr.Length > 0)
  370. cmd.Parameters.AddRange(spArr.SetDBNull());
  371. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  372. DataSet ds = new DataSet();
  373. adapter.Fill(ds);
  374. return ds;
  375. }
  376. }
  377. /// <summary>
  378. /// 根据存储过程及参数,返回DataTable
  379. /// </summary>
  380. /// <returns>DataTable</returns>
  381. public static DataTable GetDataTableByProc(string proc, params SqlParameter[] spArr)
  382. {
  383. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  384. {
  385. conn.Open();
  386. SqlCommand cmd = new SqlCommand(proc, conn).AddTimeout();
  387. cmd.CommandType = CommandType.StoredProcedure;
  388. if (spArr.Length > 0)
  389. cmd.Parameters.AddRange(spArr.SetDBNull());
  390. DataTable dt = cmd.ExecuteDataTable();
  391. return dt;
  392. }
  393. }
  394. /// <summary>
  395. /// 根据sql语句和参数,返回DataRow
  396. /// </summary>
  397. /// <param name="sql">sql语句</param>
  398. /// <param name="spArr">可变参数</param>
  399. /// <returns>DataRow</returns>
  400. public static DataRow GetDataRowByProc(string proc, params SqlParameter[] spArr)
  401. {
  402. DataTable dt = GetDataTableByProc(proc, spArr);
  403. if (dt == null || dt.Rows.Count == 0)
  404. return null;
  405. return dt.Rows[0];
  406. }
  407. #endregion
  408. #region [ Query ]
  409. /// <summary>
  410. /// 根据sql语句和参数,返回DataSet
  411. /// </summary>
  412. /// <param name="sql">sql语句</param>
  413. /// <param name="spArr">可变参数</param>
  414. /// <returns>DataSet</returns>
  415. public static DataSet GetDataSetBySql(string sql, params SqlParameter[] spArr)
  416. {
  417. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  418. {
  419. conn.Open();
  420. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  421. if (spArr.Length > 0)
  422. cmd.Parameters.AddRange(spArr.SetDBNull());
  423. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  424. DataSet ds = new DataSet();
  425. adapter.Fill(ds);
  426. return ds;
  427. }
  428. }
  429. public static DataTable GetDataSetBySql(string sql, SqlCommand cmd)
  430. {
  431. cmd.CommandText = sql;
  432. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  433. DataTable ds = new DataTable();
  434. adapter.Fill(ds);
  435. return ds;
  436. }
  437. /// <summary>
  438. /// 根据sql语句和参数,返回DataTable
  439. /// </summary>
  440. /// <param name="sql">sql语句</param>
  441. /// <param name="spArr">可变参数</param>
  442. /// <returns>DataTable</returns>
  443. public static DataTable GetDataTableBySql(string sql, params SqlParameter[] spArr)
  444. {
  445. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  446. {
  447. conn.Open();
  448. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  449. if (spArr.Length > 0)
  450. cmd.Parameters.AddRange(spArr.SetDBNull());
  451. DataTable dt = cmd.ExecuteDataTable();
  452. return dt;
  453. }
  454. }
  455. /// <summary>
  456. /// 根据sql语句和参数,返回DataRow
  457. /// </summary>
  458. /// <param name="sql">sql语句</param>
  459. /// <param name="spArr">可变参数</param>
  460. /// <returns>DataRow</returns>
  461. public static DataRow GetDataRowBySql(string sql, params SqlParameter[] spArr)
  462. {
  463. DataTable dt = GetDataTableBySql(sql, spArr);
  464. if (dt == null || dt.Rows.Count == 0)
  465. return null;
  466. return dt.Rows[0];
  467. }
  468. #endregion
  469. #region [ GetValue ]
  470. public static object GetValue(DataRow dr, string fieldName, object replaceValue)
  471. {
  472. if (dr.IsNull(fieldName))
  473. return replaceValue;
  474. return dr[fieldName];
  475. }
  476. public static object GetValue(DataRow dr, int idx, object replaceValue)
  477. {
  478. if (dr.IsNull(idx))
  479. return replaceValue;
  480. return dr[idx];
  481. }
  482. #endregion
  483. #region [ GetString ]
  484. public static string GetString(DataRow dr, string fieldName, string replaceValue)
  485. {
  486. if (dr.IsNull(fieldName))
  487. return replaceValue;
  488. return Convert.ToString(dr[fieldName]);
  489. }
  490. public static string GetString(DataRow dr, int idx, string replaceValue)
  491. {
  492. if (dr.IsNull(idx))
  493. return replaceValue;
  494. return Convert.ToString(dr[idx]);
  495. }
  496. #endregion
  497. #region [ GetDateTime ]
  498. public static DateTime GetDateTime(DataRow dr, string fieldName, DateTime replaceValue)
  499. {
  500. if (dr.IsNull(fieldName))
  501. return replaceValue;
  502. return Convert.ToDateTime(dr[fieldName]);
  503. }
  504. public static DateTime GetDateTime(DataRow dr, int idx, DateTime replaceValue)
  505. {
  506. if (dr.IsNull(idx))
  507. return replaceValue;
  508. return Convert.ToDateTime(dr[idx]);
  509. }
  510. #endregion
  511. #region [ 非数据中心库操作 ]
  512. #region [ ExecuteScalar ]
  513. /// <summary>
  514. /// 根据sql语句和参数,返回Scalar结果
  515. /// </summary>
  516. /// <param name="connString">连接串</param>
  517. /// <param name="sql">sql语句</param>
  518. /// <param name="spArr">可变参数</param>
  519. /// <returns>object</returns>
  520. public static object ExecuteScalarWithConn(string connString, string sql, params SqlParameter[] spArr)
  521. {
  522. using (SqlConnection conn = SqlHelper.GetConnByString(connString))
  523. {
  524. conn.Open();
  525. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  526. if (spArr.Length > 0)
  527. cmd.Parameters.AddRange(spArr.SetDBNull());
  528. object obj = cmd.ExecuteScalar();
  529. return obj;
  530. }
  531. }
  532. #endregion
  533. #region [ ExecuteNonQuery ]
  534. /// <summary>
  535. /// 根据sql语句和参数,返回受影响行数
  536. /// </summary>
  537. /// <param name="connString">连接串</param>
  538. /// <param name="sql">sql语句</param>
  539. /// <param name="spArr">可变参数</param>
  540. /// <returns>受影响行数</returns>
  541. public static int ExecuteNonQueryWithConn(string connString, string sql, params SqlParameter[] spArr)
  542. {
  543. using (SqlConnection conn = SqlHelper.GetConnByString(connString))
  544. {
  545. conn.Open();
  546. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  547. if (spArr.Length > 0)
  548. cmd.Parameters.AddRange(spArr.SetDBNull());
  549. return cmd.ExecuteNonQuery();
  550. }
  551. }
  552. #endregion
  553. #region [ Query ]
  554. /// <summary>
  555. /// 根据sql语句和参数,返回DataTable
  556. /// </summary>
  557. /// <param name="connString">连接串</param>
  558. /// <param name="sql">sql语句</param>
  559. /// <param name="spArr">可变参数</param>
  560. /// <returns>DataTable</returns>
  561. public static DataTable GetDataTableBySqlWithConn(string connString, string sql, params SqlParameter[] spArr)
  562. {
  563. using (SqlConnection conn = SqlHelper.GetConnByString(connString))
  564. {
  565. conn.Open();
  566. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  567. if (spArr.Length > 0)
  568. cmd.Parameters.AddRange(spArr.SetDBNull());
  569. DataTable dt = cmd.ExecuteDataTable();
  570. return dt;
  571. }
  572. }
  573. /// <summary>
  574. /// 根据sql语句和参数,返回DataRow
  575. /// </summary>
  576. /// <param name="connString">连接串</param>
  577. /// <param name="sql">sql语句</param>
  578. /// <param name="spArr">可变参数</param>
  579. /// <returns>DataRow</returns>
  580. public static DataRow GetDataRowBySqlWithConn(string connString, string sql, params SqlParameter[] spArr)
  581. {
  582. DataTable dt = GetDataTableBySqlWithConn(connString, sql, spArr);
  583. if (dt == null || dt.Rows.Count == 0)
  584. return null;
  585. return dt.Rows[0];
  586. }
  587. #endregion
  588. #endregion
  589. #region [ 根据SQL文件路径执行 ]
  590. /// <summary>
  591. /// 执行SQL文件
  592. /// </summary>
  593. /// <param name="connString"></param>
  594. /// <param name="filePath"></param>
  595. /// <returns></returns>
  596. public static bool ExecuteNonQueryWithConnAndSqlFilePath(string connString, string filePath)
  597. {
  598. string sql = System.IO.File.ReadAllText(filePath);
  599. return ExecuteNonQueryWithConnAndGO(connString, sql);
  600. }
  601. #endregion
  602. #region [ 执行带Go语句 ]
  603. /// <summary>
  604. /// 执行带"GO"的SQL,返回最后一条SQL的受影响行数
  605. /// </summary>
  606. /// <param name="connString">连接串</param>
  607. /// <param name="sql">sql语句</param>
  608. /// <returns>返回最后一条SQL的受影响行数</returns>
  609. public static bool ExecuteNonQueryWithConnAndGO(string connString, string sql)
  610. {
  611. bool result = true;
  612. string[] arr = System.Text.RegularExpressions.Regex.Split(sql, @"\bGO\b", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  613. using (SqlConnection conn = GetConnByString(connString))
  614. {
  615. conn.Open();
  616. SqlCommand cmd = new SqlCommand().AddTimeout();
  617. cmd.Connection = conn;
  618. SqlTransaction tx = conn.BeginTransaction();
  619. cmd.Transaction = tx;
  620. try
  621. {
  622. for (int n = 0; n < arr.Length; n++)
  623. {
  624. string strsql = arr[n];
  625. if (strsql.Trim().Length > 1 && strsql.Trim().Replace(";", "") != "")
  626. {
  627. cmd.CommandText = strsql;
  628. cmd.ExecuteNonQuery();
  629. }
  630. }
  631. tx.Commit();
  632. }
  633. catch (System.Data.SqlClient.SqlException E)
  634. {
  635. tx.Rollback();
  636. result = false;
  637. //return -1;
  638. throw new Exception(E.Message);
  639. }
  640. finally
  641. {
  642. if (conn.State != ConnectionState.Closed)
  643. {
  644. conn.Close();
  645. conn.Dispose();
  646. }
  647. }
  648. }
  649. return result;
  650. }
  651. #endregion
  652. /// <summary>
  653. /// 设置Sql参数
  654. /// </summary>
  655. /// <param name="parameterName"></param>
  656. /// <param name="value"></param>
  657. /// <param name="dbType"></param>
  658. /// <returns></returns>
  659. public static SqlParameter SetSqlParameter(string parameterName, object value, SqlDbType dbType)
  660. {
  661. if (value == null || string.IsNullOrEmpty(value.ToString()))
  662. {
  663. return new SqlParameter(parameterName, DBNull.Value);
  664. }
  665. SqlParameter sp = new SqlParameter(parameterName, value);
  666. sp.SqlDbType = dbType;
  667. return sp;
  668. }
  669. /// <summary>
  670. /// 根据sql及带 in 的id参数列表, 得到DataTable
  671. /// </summary>
  672. /// <param name="sql">带in ( {0} )的sql</param>
  673. /// <param name="ids">以逗号分隔的id字符串</param>
  674. /// <param name="idDbType">id的Sql数据类型</param>
  675. /// <returns>DataTable</returns>
  676. public static DataTable GetDataTableWithIn(string sql, string ids, SqlDbType idDbType)
  677. {
  678. SqlParameter[] spArr = GetWithInSqlParameters(ref sql, ids, idDbType);
  679. return GetDataTableBySql(sql, spArr);
  680. }
  681. /// <summary>
  682. /// 根据sql及带 in 的id参数列表, 得到受影响行数
  683. /// </summary>
  684. /// <param name="sql">带in ( {0} )的sql</param>
  685. /// <param name="ids">以逗号分隔的id字符串</param>
  686. /// <param name="idDbType">id的Sql数据类型</param>
  687. /// <returns>DataTable</returns>
  688. public static int ExecuteNonQueryWithIn(string sql, string ids, SqlDbType idDbType)
  689. {
  690. SqlParameter[] spArr = GetWithInSqlParameters(ref sql, ids, idDbType);
  691. return ExecuteNonQuery(sql, spArr);
  692. }
  693. #region [ 带 in 不确定参数的执行方法 ]
  694. /// <summary>
  695. /// 获取带 in 的sql参数列表
  696. /// </summary>
  697. /// <param name="sql">带in ( {0} )的sql</param>
  698. /// <param name="ids">以逗号分隔的id字符串</param>
  699. /// <param name="idDbType">id的Sql数据类型</param>
  700. /// <returns>sql参数列表</returns>
  701. public static SqlParameter[] GetWithInSqlParameters(ref string sql, string ids, SqlDbType idDbType)
  702. {
  703. if (string.IsNullOrEmpty(ids))
  704. {
  705. return null;
  706. }
  707. string[] idArr = ids.Split(',');
  708. //组建sql在in中的字符串
  709. StringBuilder sbCondition = new StringBuilder();
  710. List<SqlParameter> spList = new List<SqlParameter>();
  711. for (int i = 0; i < idArr.Length; i++)
  712. {
  713. string id = idArr[i];
  714. string spName = string.Format("@id{0}", i);
  715. sbCondition.AppendFormat("{0},", spName);
  716. spList.Add(SetSqlParameter(spName, id, idDbType));
  717. }
  718. //重新构建sql
  719. sql = string.Format(sql, sbCondition.ToString().TrimEnd(','));
  720. return spList.ToArray();
  721. }
  722. #endregion
  723. public static DataTable FindTablePageBySql_OtherTemp(string strSql, string TempName, string Droptable, DbParameter[] parameters, ref Pagination Pagination)
  724. {
  725. string orderField = Pagination.sidx;
  726. string orderType = Pagination.sord;
  727. int pageIndex = Pagination.page;
  728. int pageSize = Pagination.rows;
  729. int totalRow = Pagination.records;
  730. DataTable dt = GetPageTable_EXISTSTemp(strSql, TempName, Droptable, parameters, orderField, orderType, pageIndex, pageSize, ref totalRow);
  731. Pagination.records = totalRow;
  732. return dt;
  733. }
  734. private static DataTable GetPageTable_EXISTSTemp(string sql, string sqlTempName, string Droptable, DbParameter[] param, string orderField, string orderType, int pageIndex, int pageSize, ref int count)
  735. {
  736. //StringBuilder strSql = new StringBuilder();
  737. if (pageIndex == 0)
  738. {
  739. pageIndex = 1;
  740. }
  741. int num = (pageIndex - 1) * pageSize;
  742. int num1 = (pageIndex) * pageSize;
  743. string OrderBy = " order by InvCode desc ";
  744. //if (!string.IsNullOrEmpty(orderField))
  745. // OrderBy = "Order By " + orderField + " " + orderType + "";
  746. //else
  747. // OrderBy = "order by (select 0)";
  748. //strSql.Append(sql+@" Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")");
  749. //strSql.Append(" As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " " + Droptable);
  750. //count = Convert.ToInt32(ExecuteScalar(CommandType.Text, sql + " Select Count(1) From " + sqlTempName +" "+ Droptable, param));
  751. //IDataReader dr = ExecuteReader(CommandType.Text, strSql.ToString(), param);
  752. //return DatabaseReader.ReaderToDataTable(dr);
  753. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  754. {
  755. conn.Open();
  756. sql += " Select Count(1) From " + sqlTempName;
  757. sql += " Select * From (Select ROW_NUMBER() Over (" + OrderBy + ") ";
  758. sql += " As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " ";
  759. sql += Droptable;
  760. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  761. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  762. DataSet ds = new DataSet();
  763. adapter.Fill(ds);
  764. string ss = ds.Tables[1].Rows[0][0].ToString();
  765. count = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
  766. return ds.Tables[0];
  767. }
  768. }
  769. public static string Organize_F_ParentId(string F_Account)
  770. {
  771. string F_ParentId = string.Empty;
  772. string sql = @"
  773. SELECT c.F_ID,c.F_ParentId FROM sys_srm_user a
  774. LEFT JOIN sys_SRM_Role b ON a.F_RoleID=b.F_ID
  775. LEFT JOIN Sys_SRM_Organize c ON b.F_OrganizeId=c.F_ID
  776. WHERE a.F_Account='{0}'";
  777. sql = string.Format(sql, F_Account);
  778. DataTable dt = GetDataTableBySql(sql);
  779. if (dt.Rows.Count > 0)
  780. {
  781. if (dt.Rows[0]["F_ParentId"].ToString() == "0")
  782. {
  783. F_ParentId = "0";
  784. }
  785. else
  786. {
  787. F_ParentId = dt.Rows[0]["F_ID"].ToString();
  788. }
  789. }
  790. return F_ParentId;
  791. }
  792. public static string Organize_F_Account(string F_ParentId, string Selectsql)
  793. {
  794. DataTable dt = null;
  795. string sql = @"with
  796. CTE
  797. as
  798. (
  799. select * from Sys_SRM_Organize where F_Id='{0}'
  800. union all
  801. select G.* from CTE inner join Sys_SRM_Organize as G
  802. on CTE.F_Id=G.F_ParentID
  803. ){1}
  804. AND CreatePerson IN
  805. (select F_RealName from CTE a
  806. inner JOIN sys_SRM_Role b ON a.F_ID=b.F_OrganizeId
  807. inner JOIN sys_srm_user c ON b.F_ID=c.F_RoleID
  808. )";
  809. sql = string.Format(sql, F_ParentId, Selectsql);
  810. return sql;
  811. }
  812. /// <summary>
  813. /// 组织架构专属查询方法
  814. /// </summary>
  815. /// <param name="strSql"></param>
  816. /// <param name="TempName"></param>
  817. /// <param name="ParentId"></param>
  818. /// <param name="parameters"></param>
  819. /// <param name="Pagination"></param>
  820. /// <returns></returns>
  821. public static DataTable FindTablePageBySql_OtherTempByZZ(string strSql, string TempName, string ParentId, DbParameter[] parameters, ref Pagination Pagination)
  822. {
  823. string orderField = Pagination.sidx;
  824. string orderType = Pagination.sord;
  825. int pageIndex = Pagination.page;
  826. int pageSize = Pagination.rows;
  827. int totalRow = Pagination.records;
  828. DataTable dt = GetPageTable_EXISTSTempBYZZ(strSql, TempName, ParentId, parameters, orderField, orderType, pageIndex, pageSize, ref totalRow);
  829. Pagination.records = totalRow;
  830. return dt;
  831. }
  832. private static DataTable GetPageTable_EXISTSTempBYZZ(string sql, string sqlTempName, string ParentId, DbParameter[] param, string orderField, string orderType, int pageIndex, int pageSize, ref int count)
  833. {
  834. if (pageIndex == 0)
  835. {
  836. pageIndex = 1;
  837. }
  838. int num = (pageIndex - 1) * pageSize;
  839. int num1 = (pageIndex) * pageSize;
  840. string OrderBy = " order by " + orderField + " " + orderType + " ";
  841. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  842. {
  843. conn.Open();
  844. sql = @" with
  845. CTE
  846. as
  847. (
  848. select * from Sys_SRM_Organize where F_Id='" + ParentId + @"'
  849. union all
  850. select G.* from CTE inner join Sys_SRM_Organize as G
  851. on CTE.F_Id=G.F_ParentID
  852. ) Select * From (Select ROW_NUMBER() Over (" + OrderBy + ") ";
  853. sql += @" As rowNum, * From (" + sqlTempName + @" AND CreatePerson IN
  854. (select F_RealName from CTE a
  855. inner JOIN sys_SRM_Role b ON a.F_ID=b.F_OrganizeId
  856. inner JOIN sys_srm_user c ON b.F_ID=c.F_RoleID
  857. )) As T ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " ";
  858. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  859. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  860. DataSet ds = new DataSet();
  861. adapter.Fill(ds);
  862. //string ss = ds.Tables[0].Rows[0][0].ToString();
  863. count = ds.Tables[0].Rows.Count <= 0 ? 0 : Convert.ToInt32(ds.Tables[0].Rows[0][0].ToString());
  864. return ds.Tables[0];
  865. }
  866. }
  867. /// <summary>
  868. /// 获取图纸并下载, 返回保存位置
  869. /// </summary>
  870. /// <param name="ITEMCODE"></param>
  871. /// <param name="OPCODE"></param>
  872. /// <param name="OPSEQ"></param>
  873. /// <param name="TYPE"></param>
  874. /// <returns></returns>
  875. public static string HttpGet(string url)
  876. {
  877. try
  878. {
  879. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  880. request.Method = "GET";
  881. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  882. request.ContentType = "application/json; charset=utf-8";
  883. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  884. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  885. {
  886. return reader.ReadToEnd();
  887. }
  888. }
  889. catch (WebException ex)
  890. {
  891. throw new Exception(ex.Message);
  892. }
  893. }
  894. /// <summary>
  895. /// 获取数据字典公共方法
  896. /// </summary>
  897. /// <param name="F_EnCode"></param>
  898. /// <returns></returns>
  899. public static string GetItemsDetails(string F_EnCode)
  900. {
  901. string sql = @"SELECT a.F_ItemCode,a.F_ItemName FROM Sys_SRM_ItemsDetail a
  902. LEFT JOIN Sys_SRM_Items b ON a.F_ItemId = b.F_Id
  903. WHERE b.F_EnCode = '{0}'";
  904. sql = string.Format(sql, F_EnCode);
  905. DataTable dt = GetDataTableBySql(sql);
  906. return dt.Rows[0]["F_ItemCode"].ToString();
  907. }
  908. /// <summary>
  909. /// 获取配置文件信息
  910. /// </summary>
  911. /// <param name="F_EnCode"></param>
  912. /// <returns></returns>
  913. public static string GetItemsDetails(string F_EnCode, string WorkPoint)
  914. {
  915. string msg = string.Empty;
  916. string sqldetail = @"SELECT a.F_ItemName,a.F_Description FROM Sys_SRM_ItemsDetail a
  917. LEFT JOIN Sys_SRM_Items b ON a.F_ItemId = b.F_Id
  918. WHERE b.F_EnCode = '{0}' and a.F_EnabledMark='1' and a.F_ItemCode='{1}'";
  919. sqldetail = string.Format(sqldetail, F_EnCode, WorkPoint);
  920. DataTable dts = GetDataTableBySql(sqldetail);
  921. if (dts.Rows.Count > 0)
  922. {
  923. msg = dts.Rows[0]["F_Description"].ToString();
  924. }
  925. return msg;
  926. }
  927. /// <summary>
  928. /// DataSet转Json字符串,主子结构
  929. /// 需要建立主子表关系,第一张表为主表
  930. /// 会排除关联列
  931. /// </summary>
  932. /// <param name="dataSet"></param>
  933. /// <param name="RelationName">关系名称</param>
  934. /// <returns></returns>
  935. /// <summary>
  936. /// DataSet转Json字符串,主子结构
  937. /// 需要建立主子表关系,第一张表为主表
  938. /// 会排除关联列
  939. /// </summary>
  940. /// <param name="dataSet"></param>
  941. /// <param name="RelationName">关系名称</param>
  942. /// <returns></returns>
  943. public static string DataSetToJson(DataSet dataSet, string RelationName, string column)
  944. {
  945. DataRelation dataRelation = new DataRelation(RelationName, dataSet.Tables[0].Columns[column], dataSet.Tables[1].Columns[column], false);
  946. dataSet.Relations.Add(dataRelation);
  947. StringBuilder jsonString = new StringBuilder();
  948. //foreach (DataTable table in dataSet.Tables)
  949. //{
  950. DataTable table = dataSet.Tables[0];
  951. jsonString.Append("[");
  952. DataRowCollection drc = table.Rows;
  953. for (int i = 0; i < drc.Count; i++)
  954. {
  955. DataRow dataRow = drc[i];
  956. jsonString.Append("{");
  957. for (int j = 0; j < table.Columns.Count; j++)
  958. {
  959. string strKey = table.Columns[j].ColumnName;
  960. if (dataSet.Relations[RelationName].ParentColumns.Select(a => a.Caption).Contains(strKey))
  961. continue;
  962. string strValue = dataRow[j].ToString();
  963. Type type = table.Columns[j].DataType;
  964. jsonString.Append("\"" + strKey + "\":");
  965. strValue = StringFormat(strValue, type);
  966. if (j < table.Columns.Count - 1)
  967. {
  968. jsonString.Append(strValue + ",");
  969. }
  970. else
  971. {
  972. jsonString.Append(strValue);
  973. }
  974. }
  975. jsonString.Append(",\"" + RelationName + "\":");
  976. DataRow[] drs = dataRow.GetChildRows(RelationName);
  977. jsonString.Append("[");
  978. foreach (DataRow dr in drs)
  979. {
  980. DataTable dt = dr.Table;
  981. jsonString.Append("{");
  982. for (int j = 0; j < dt.Columns.Count; j++)
  983. {
  984. string strKey = dt.Columns[j].ColumnName;
  985. if (dataSet.Relations[RelationName].ChildColumns.Select(a => a.Caption).Contains(strKey))
  986. continue;
  987. string strValue = dr[j].ToString();
  988. Type type = dt.Columns[j].DataType;
  989. jsonString.Append("\"" + strKey + "\":");
  990. strValue = StringFormat(strValue, type);
  991. if (j < dt.Columns.Count - 1)
  992. {
  993. jsonString.Append(strValue + ",");
  994. }
  995. else
  996. {
  997. jsonString.Append(strValue);
  998. }
  999. }
  1000. jsonString.Append("},");
  1001. }
  1002. if (drs.Length > 0)
  1003. jsonString.Remove(jsonString.Length - 1, 1);
  1004. jsonString.Append("]");
  1005. jsonString.Append("},");
  1006. }
  1007. jsonString.Remove(jsonString.Length - 1, 1);
  1008. jsonString.Append("]");
  1009. //}
  1010. string res = jsonString.ToString();
  1011. return res;
  1012. }
  1013. /// <summary>
  1014. /// 格式化字符型、日期型、布尔型
  1015. /// </summary>
  1016. /// <param name="str"></param>
  1017. /// <param name="type"></param>
  1018. /// <returns></returns>
  1019. private static string StringFormat(string str, Type type)
  1020. {
  1021. if (type == typeof(string))
  1022. {
  1023. str = String2Json(str);
  1024. str = "\"" + str + "\"";
  1025. }
  1026. else if (type == typeof(DateTime))
  1027. {
  1028. str = "\"" + str + "\"";
  1029. }
  1030. else if (type == typeof(bool))
  1031. {
  1032. str = str.ToLower();
  1033. }
  1034. else if (type != typeof(string) && string.IsNullOrEmpty(str))
  1035. {
  1036. str = "\"" + str + "\"";
  1037. }
  1038. return str;
  1039. }
  1040. /// <summary>
  1041. /// 过滤特殊字符
  1042. /// </summary>
  1043. /// <param name="s">字符串</param>
  1044. /// <returns>json字符串</returns>
  1045. private static string String2Json(String s)
  1046. {
  1047. StringBuilder sb = new StringBuilder();
  1048. for (int i = 0; i < s.Length; i++)
  1049. {
  1050. char c = s.ToCharArray()[i];
  1051. switch (c)
  1052. {
  1053. case '\"':
  1054. sb.Append("\\\""); break;
  1055. case '\\':
  1056. sb.Append("\\\\"); break;
  1057. case '/':
  1058. sb.Append("\\/"); break;
  1059. case '\b':
  1060. sb.Append("\\b"); break;
  1061. case '\f':
  1062. sb.Append("\\f"); break;
  1063. case '\n':
  1064. sb.Append("\\n"); break;
  1065. case '\r':
  1066. sb.Append("\\r"); break;
  1067. case '\t':
  1068. sb.Append("\\t"); break;
  1069. default:
  1070. sb.Append(c); break;
  1071. }
  1072. }
  1073. return sb.ToString();
  1074. }
  1075. /// <summary>
  1076. /// 查询数据字典配置
  1077. /// </summary>
  1078. /// <param name="F_EnCode"></param>
  1079. /// <param name="WorkPoint"></param>
  1080. /// <returns></returns>
  1081. public static string GetSHDZDSHItemsDetails(string F_EnCode, string WorkPoint)
  1082. {
  1083. string msg = string.Empty;
  1084. string sqldetail = @"SELECT a.F_ItemName,a.F_Description FROM Sys_SRM_ItemsDetail a
  1085. LEFT JOIN Sys_SRM_Items b ON a.F_ItemId = b.F_Id
  1086. WHERE b.F_EnCode = '{0}' and a.F_EnabledMark='1'";
  1087. sqldetail = string.Format(sqldetail, F_EnCode, WorkPoint);
  1088. DataTable dts = GetDataTableBySql(sqldetail);
  1089. if (dts.Rows.Count > 0)
  1090. {
  1091. msg = dts.Rows[0]["F_ItemName"].ToString();
  1092. }
  1093. return msg;
  1094. }
  1095. public static DataTable FindTablePageBySql_OtherTemp3(string strSql, string TempName, string Droptable, DbParameter[] parameters, ref Pagination Pagination)
  1096. {
  1097. string orderField = Pagination.sidx;
  1098. string orderType = Pagination.sord;
  1099. int pageIndex = Pagination.page;
  1100. int pageSize = Pagination.rows;
  1101. int totalRow = Pagination.records;
  1102. DataTable dt = GetPageTable_EXISTSTemp3(strSql, TempName, Droptable, parameters, orderField, orderType, pageIndex, pageSize, ref totalRow);
  1103. Pagination.records = totalRow;
  1104. return dt;
  1105. }
  1106. private static DataTable GetPageTable_EXISTSTemp3(string sql, string sqlTempName, string Droptable, DbParameter[] param, string orderField, string orderType, int pageIndex, int pageSize, ref int count)
  1107. {
  1108. //StringBuilder strSql = new StringBuilder();
  1109. if (pageIndex == 0)
  1110. {
  1111. pageIndex = 1;
  1112. }
  1113. int num = (pageIndex - 1) * pageSize;
  1114. int num1 = (pageIndex) * pageSize;
  1115. //string OrderBy = " order by STNO desc ";
  1116. string OrderBy = "";
  1117. if (!string.IsNullOrEmpty(orderField))
  1118. OrderBy = "Order By " + orderField + " " + orderType + "";
  1119. else
  1120. OrderBy = "order by (select 0)";
  1121. //strSql.Append(sql+@" Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")");
  1122. //strSql.Append(" As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " " + Droptable);
  1123. //count = Convert.ToInt32(ExecuteScalar(CommandType.Text, sql + " Select Count(1) From " + sqlTempName +" "+ Droptable, param));
  1124. //IDataReader dr = ExecuteReader(CommandType.Text, strSql.ToString(), param);
  1125. //return DatabaseReader.ReaderToDataTable(dr);
  1126. using (SqlConnection conn = SqlHelper.GetDataCenterConn())
  1127. {
  1128. conn.Open();
  1129. sql += " Select Count(1) From " + sqlTempName;
  1130. sql += " Select * From (Select ROW_NUMBER() Over (" + OrderBy + ") ";
  1131. sql += " As rowNum, * From " + sqlTempName + " ) As N Where rowNum > " + num + " And rowNum <= " + num1 + " ";
  1132. sql += Droptable;
  1133. SqlCommand cmd = new SqlCommand(sql, conn).AddTimeout();
  1134. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  1135. DataSet ds = new DataSet();
  1136. adapter.Fill(ds);
  1137. //string ss = ds.Tables[0].Rows[0][0].ToString();
  1138. if (ds.Tables[2].Rows.Count > 0)
  1139. {
  1140. count = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
  1141. return ds.Tables[2];
  1142. }
  1143. else
  1144. {
  1145. return new DataTable();
  1146. }
  1147. }
  1148. }
  1149. }//end of class
  1150. #region [ SqlHelper 的扩展方法类 ]
  1151. /// <summary>
  1152. /// 扩展方法类
  1153. /// </summary>
  1154. public static class SqlHelperExtensionMethods
  1155. {
  1156. /// <summary>
  1157. /// 新建SqlCommand对象时, 自动加上指定的 CommandTimeout. by ngye, on 2013-07-11.
  1158. /// </summary>
  1159. /// <param name="cmd">SqlCommand对象</param>
  1160. /// <returns>SqlCommand对象</returns>
  1161. public static SqlCommand AddTimeout(this SqlCommand cmd)
  1162. {
  1163. cmd.CommandTimeout = SqlHelper.CommandTimeout;
  1164. return cmd;
  1165. }
  1166. /// <summary>
  1167. /// 新建SqlBulkCopy对象时, 自动加上指定的 BulkCopyTimeout. by ngye, on 2013-08-30.
  1168. /// </summary>
  1169. /// <param name="cmd">SqlBulkCopy对象</param>
  1170. /// <returns>SqlBulkCopy对象</returns>
  1171. public static SqlBulkCopy AddTimeout(this SqlBulkCopy bulkCopy)
  1172. {
  1173. bulkCopy.BulkCopyTimeout = SqlHelper.CommandTimeout;
  1174. return bulkCopy;
  1175. }
  1176. /// <summary>
  1177. /// 执行cmd得到 DataTable. by ngye, on 2013-08-01
  1178. /// </summary>
  1179. /// <param name="cmd"></param>
  1180. /// <returns></returns>
  1181. public static DataTable ExecuteDataTable(this SqlCommand cmd)
  1182. {
  1183. DataTable dt = new DataTable();
  1184. using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
  1185. {
  1186. adapter.Fill(dt);
  1187. }
  1188. return dt;
  1189. }
  1190. /// <summary>
  1191. /// 为SqlParameter设置参数. by ngye, on 2013-08-15.
  1192. /// </summary>
  1193. /// <param name="sp"></param>
  1194. /// <returns></returns>
  1195. public static SqlParameter SetValue(this SqlParameter sp, object value)
  1196. {
  1197. sp.Value = value;
  1198. return sp;
  1199. }
  1200. /// <summary>
  1201. /// 为SqlParameter设置SqlDbType. by ngye, on 2013-09-03.
  1202. /// </summary>
  1203. /// <param name="sp"></param>
  1204. /// <returns></returns>
  1205. public static SqlParameter SetSqlDbType(this SqlParameter sp, SqlDbType dbType)
  1206. {
  1207. sp.SqlDbType = dbType;
  1208. return sp;
  1209. }
  1210. /// <summary>
  1211. /// 对可以为空的值作这样的处理,一旦其为空,就设置为DBNull.value.
  1212. /// </summary>
  1213. /// <param name="sp"></param>
  1214. /// <returns></returns>
  1215. public static SqlParameter[] SetDBNull(this SqlParameter[] spArr)
  1216. {
  1217. if (spArr == null || spArr.Length == 0)
  1218. return spArr;
  1219. for (int i = 0; i < spArr.Length; i++)
  1220. {
  1221. SqlParameter sp = spArr[i];
  1222. if (sp.Value == null)
  1223. sp.Value = DBNull.Value;
  1224. }
  1225. return spArr;
  1226. }
  1227. }
  1228. #endregion
  1229. }