1. using System;
  2. using System.Collections;
  3. using System.Collections.Specialized;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Configuration;
  7. using System.Data.Common;
  8. using System.Collections.Generic;
  9. namespace Maticsoft.DBUtility
  10. {
  11. /// <summary>
  12. /// 数据访问抽象基础类
  13. /// Copyright (C) Maticsoft
  14. /// </summary>
  15. public abstract class DbHelperSQL
  16. {
  17. //数据库连接字符串(web.config来配置),多数据库可使用DbHelperSQLP来实现.
  18. public static string connectionString = PubConstant.ConnectionString;
  19. public DbHelperSQL()
  20. {
  21. }
  22.  
  23. #region 公用方法
  24. /// <summary>
  25. /// 判断是否存在某表的某个字段
  26. /// </summary>
  27. /// <param name="tableName">表名称</param>
  28. /// <param name="columnName">列名称</param>
  29. /// <returns>是否存在</returns>
  30. public static bool ColumnExists(string tableName, string columnName)
  31. {
  32. string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
  33. object res = GetSingle(sql);
  34. if (res == null)
  35. {
  36. return false;
  37. }
  38. return Convert.ToInt32(res) > ;
  39. }
  40. public static int GetMaxID(string FieldName, string TableName)
  41. {
  42. string strsql = "select max(" + FieldName + ")+1 from " + TableName;
  43. object obj = GetSingle(strsql);
  44. if (obj == null)
  45. {
  46. return ;
  47. }
  48. else
  49. {
  50. return int.Parse(obj.ToString());
  51. }
  52. }
  53. public static bool Exists(string strSql)
  54. {
  55. object obj = GetSingle(strSql);
  56. int cmdresult;
  57. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  58. {
  59. cmdresult = ;
  60. }
  61. else
  62. {
  63. cmdresult = int.Parse(obj.ToString()); //也可能=0
  64. }
  65. if (cmdresult == )
  66. {
  67. return false;
  68. }
  69. else
  70. {
  71. return true;
  72. }
  73. }
  74. /// <summary>
  75. /// 表是否存在
  76. /// </summary>
  77. /// <param name="TableName"></param>
  78. /// <returns></returns>
  79. public static bool TabExists(string TableName)
  80. {
  81. string strsql = "select count(*) from sysobjects where id = object_id(N'[" + TableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
  82. //string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')";
  83. object obj = GetSingle(strsql);
  84. int cmdresult;
  85. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  86. {
  87. cmdresult = ;
  88. }
  89. else
  90. {
  91. cmdresult = int.Parse(obj.ToString());
  92. }
  93. if (cmdresult == )
  94. {
  95. return false;
  96. }
  97. else
  98. {
  99. return true;
  100. }
  101. }
  102. public static bool Exists(string strSql, params SqlParameter[] cmdParms)
  103. {
  104. object obj = GetSingle(strSql, cmdParms);
  105. int cmdresult;
  106. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  107. {
  108. cmdresult = ;
  109. }
  110. else
  111. {
  112. cmdresult = int.Parse(obj.ToString());
  113. }
  114. if (cmdresult == )
  115. {
  116. return false;
  117. }
  118. else
  119. {
  120. return true;
  121. }
  122. }
  123. #endregion
  124.  
  125. #region 执行简单SQL语句
  126.  
  127. /// <summary>
  128. /// 执行SQL语句,返回影响的记录数
  129. /// </summary>
  130. /// <param name="SQLString">SQL语句</param>
  131. /// <returns>影响的记录数</returns>
  132. public static int ExecuteSql(string SQLString)
  133. {
  134. using (SqlConnection connection = new SqlConnection(connectionString))
  135. {
  136. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  137. {
  138. try
  139. {
  140. connection.Open();
  141. int rows = cmd.ExecuteNonQuery();
  142. return rows;
  143. }
  144. catch (System.Data.SqlClient.SqlException e)
  145. {
  146. connection.Close();
  147. throw e;
  148. }
  149. }
  150. }
  151. }
  152.  
  153. public static int ExecuteSqlByTime(string SQLString, int Times)
  154. {
  155. using (SqlConnection connection = new SqlConnection(connectionString))
  156. {
  157. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  158. {
  159. try
  160. {
  161. connection.Open();
  162. cmd.CommandTimeout = Times;
  163. int rows = cmd.ExecuteNonQuery();
  164. return rows;
  165. }
  166. catch (System.Data.SqlClient.SqlException e)
  167. {
  168. connection.Close();
  169. throw e;
  170. }
  171. }
  172. }
  173. }
  174.  
  175. /// <summary>
  176. /// 执行Sql和Oracle滴混合事务
  177. /// </summary>
  178. /// <param name="list">SQL命令行列表</param>
  179. /// <param name="oracleCmdSqlList">Oracle命令行列表</param>
  180. /// <returns>执行结果 0-由于SQL造成事务失败 -1 由于Oracle造成事务失败 1-整体事务执行成功</returns>
  181. public static int ExecuteSqlTran(List<CommandInfo> list, List<CommandInfo> oracleCmdSqlList)
  182. {
  183. using (SqlConnection conn = new SqlConnection(connectionString))
  184. {
  185. conn.Open();
  186. SqlCommand cmd = new SqlCommand();
  187. cmd.Connection = conn;
  188. SqlTransaction tx = conn.BeginTransaction();
  189. cmd.Transaction = tx;
  190. try
  191. {
  192. foreach (CommandInfo myDE in list)
  193. {
  194. string cmdText = myDE.CommandText;
  195. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  196. PrepareCommand(cmd, conn, tx, cmdText, cmdParms);
  197. if (myDE.EffentNextType == EffentNextType.SolicitationEvent)
  198. {
  199. if (myDE.CommandText.ToLower().IndexOf("count(") == -)
  200. {
  201. tx.Rollback();
  202. throw new Exception("违背要求"+myDE.CommandText+"必须符合select count(..的格式");
  203. //return 0;
  204. }
  205.  
  206. object obj = cmd.ExecuteScalar();
  207. bool isHave = false;
  208. if (obj == null && obj == DBNull.Value)
  209. {
  210. isHave = false;
  211. }
  212. isHave = Convert.ToInt32(obj) > ;
  213. if (isHave)
  214. {
  215. //引发事件
  216. myDE.OnSolicitationEvent();
  217. }
  218. }
  219. if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
  220. {
  221. if (myDE.CommandText.ToLower().IndexOf("count(") == -)
  222. {
  223. tx.Rollback();
  224. throw new Exception("SQL:违背要求" + myDE.CommandText + "必须符合select count(..的格式");
  225. //return 0;
  226. }
  227.  
  228. object obj = cmd.ExecuteScalar();
  229. bool isHave = false;
  230. if (obj == null && obj == DBNull.Value)
  231. {
  232. isHave = false;
  233. }
  234. isHave = Convert.ToInt32(obj) > ;
  235.  
  236. if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
  237. {
  238. tx.Rollback();
  239. throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须大于0");
  240. //return 0;
  241. }
  242. if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
  243. {
  244. tx.Rollback();
  245. throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须等于0");
  246. //return 0;
  247. }
  248. continue;
  249. }
  250. int val = cmd.ExecuteNonQuery();
  251. if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == )
  252. {
  253. tx.Rollback();
  254. throw new Exception("SQL:违背要求" + myDE.CommandText + "必须有影响行");
  255. //return 0;
  256. }
  257. cmd.Parameters.Clear();
  258. }
  259. string oraConnectionString = PubConstant.GetConnectionString("ConnectionStringPPC");
  260. bool res = OracleHelper.ExecuteSqlTran(oraConnectionString, oracleCmdSqlList);
  261. if (!res)
  262. {
  263. tx.Rollback();
  264. throw new Exception("Oracle执行失败");
  265. // return -1;
  266. }
  267. tx.Commit();
  268. return ;
  269. }
  270. catch (System.Data.SqlClient.SqlException e)
  271. {
  272. tx.Rollback();
  273. throw e;
  274. }
  275. catch (Exception e)
  276. {
  277. tx.Rollback();
  278. throw e;
  279. }
  280. }
  281. }
  282. /// <summary>
  283. /// 执行多条SQL语句,实现数据库事务。
  284. /// </summary>
  285. /// <param name="SQLStringList">多条SQL语句</param>
  286. public static int ExecuteSqlTran(List<String> SQLStringList)
  287. {
  288. using (SqlConnection conn = new SqlConnection(connectionString))
  289. {
  290. conn.Open();
  291. SqlCommand cmd = new SqlCommand();
  292. cmd.Connection = conn;
  293. SqlTransaction tx = conn.BeginTransaction();
  294. cmd.Transaction = tx;
  295. try
  296. {
  297. int count = ;
  298. for (int n = ; n < SQLStringList.Count; n++)
  299. {
  300. string strsql = SQLStringList[n];
  301. if (strsql.Trim().Length > )
  302. {
  303. cmd.CommandText = strsql;
  304. count += cmd.ExecuteNonQuery();
  305. }
  306. }
  307. tx.Commit();
  308. return count;
  309. }
  310. catch
  311. {
  312. tx.Rollback();
  313. return ;
  314. }
  315. }
  316. }
  317. /// <summary>
  318. /// 执行带一个存储过程参数的的SQL语句。
  319. /// </summary>
  320. /// <param name="SQLString">SQL语句</param>
  321. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  322. /// <returns>影响的记录数</returns>
  323. public static int ExecuteSql(string SQLString, string content)
  324. {
  325. using (SqlConnection connection = new SqlConnection(connectionString))
  326. {
  327. SqlCommand cmd = new SqlCommand(SQLString, connection);
  328. System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
  329. myParameter.Value = content;
  330. cmd.Parameters.Add(myParameter);
  331. try
  332. {
  333. connection.Open();
  334. int rows = cmd.ExecuteNonQuery();
  335. return rows;
  336. }
  337. catch (System.Data.SqlClient.SqlException e)
  338. {
  339. throw e;
  340. }
  341. finally
  342. {
  343. cmd.Dispose();
  344. connection.Close();
  345. }
  346. }
  347. }
  348. /// <summary>
  349. /// 执行带一个存储过程参数的的SQL语句。
  350. /// </summary>
  351. /// <param name="SQLString">SQL语句</param>
  352. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  353. /// <returns>影响的记录数</returns>
  354. public static object ExecuteSqlGet(string SQLString, string content)
  355. {
  356. using (SqlConnection connection = new SqlConnection(connectionString))
  357. {
  358. SqlCommand cmd = new SqlCommand(SQLString, connection);
  359. System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
  360. myParameter.Value = content;
  361. cmd.Parameters.Add(myParameter);
  362. try
  363. {
  364. connection.Open();
  365. object obj = cmd.ExecuteScalar();
  366. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  367. {
  368. return null;
  369. }
  370. else
  371. {
  372. return obj;
  373. }
  374. }
  375. catch (System.Data.SqlClient.SqlException e)
  376. {
  377. throw e;
  378. }
  379. finally
  380. {
  381. cmd.Dispose();
  382. connection.Close();
  383. }
  384. }
  385. }
  386. /// <summary>
  387. /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
  388. /// </summary>
  389. /// <param name="strSQL">SQL语句</param>
  390. /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
  391. /// <returns>影响的记录数</returns>
  392. public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
  393. {
  394. using (SqlConnection connection = new SqlConnection(connectionString))
  395. {
  396. SqlCommand cmd = new SqlCommand(strSQL, connection);
  397. System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
  398. myParameter.Value = fs;
  399. cmd.Parameters.Add(myParameter);
  400. try
  401. {
  402. connection.Open();
  403. int rows = cmd.ExecuteNonQuery();
  404. return rows;
  405. }
  406. catch (System.Data.SqlClient.SqlException e)
  407. {
  408. throw e;
  409. }
  410. finally
  411. {
  412. cmd.Dispose();
  413. connection.Close();
  414. }
  415. }
  416. }
  417.  
  418. /// <summary>
  419. /// 执行一条计算查询结果语句,返回查询结果(object)。
  420. /// </summary>
  421. /// <param name="SQLString">计算查询结果语句</param>
  422. /// <returns>查询结果(object)</returns>
  423. public static object GetSingle(string SQLString)
  424. {
  425. using (SqlConnection connection = new SqlConnection(connectionString))
  426. {
  427. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  428. {
  429. try
  430. {
  431. connection.Open();
  432. object obj = cmd.ExecuteScalar();
  433. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  434. {
  435. return null;
  436. }
  437. else
  438. {
  439. return obj;
  440. }
  441. }
  442. catch (System.Data.SqlClient.SqlException e)
  443. {
  444. connection.Close();
  445. throw e;
  446. }
  447. }
  448. }
  449. }
  450. public static object GetSingle(string SQLString, int Times)
  451. {
  452. using (SqlConnection connection = new SqlConnection(connectionString))
  453. {
  454. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  455. {
  456. try
  457. {
  458. connection.Open();
  459. cmd.CommandTimeout = Times;
  460. object obj = cmd.ExecuteScalar();
  461. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  462. {
  463. return null;
  464. }
  465. else
  466. {
  467. return obj;
  468. }
  469. }
  470. catch (System.Data.SqlClient.SqlException e)
  471. {
  472. connection.Close();
  473. throw e;
  474. }
  475. }
  476. }
  477. }
  478. /// <summary>
  479. /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  480. /// </summary>
  481. /// <param name="strSQL">查询语句</param>
  482. /// <returns>SqlDataReader</returns>
  483. public static SqlDataReader ExecuteReader(string strSQL)
  484. {
  485. SqlConnection connection = new SqlConnection(connectionString);
  486. SqlCommand cmd = new SqlCommand(strSQL, connection);
  487. try
  488. {
  489. connection.Open();
  490. SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  491. return myReader;
  492. }
  493. catch (System.Data.SqlClient.SqlException e)
  494. {
  495. throw e;
  496. }
  497.  
  498. }
  499. /// <summary>
  500. /// 执行查询语句,返回DataSet
  501. /// </summary>
  502. /// <param name="SQLString">查询语句</param>
  503. /// <returns>DataSet</returns>
  504. public static DataSet Query(string SQLString)
  505. {
  506. using (SqlConnection connection = new SqlConnection(connectionString))
  507. {
  508. DataSet ds = new DataSet();
  509. try
  510. {
  511. connection.Open();
  512. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  513. command.Fill(ds, "ds");
  514. }
  515. catch (System.Data.SqlClient.SqlException ex)
  516. {
  517. throw new Exception(ex.Message);
  518. }
  519. return ds;
  520. }
  521. }
  522. public static DataSet Query(string SQLString, int Times)
  523. {
  524. using (SqlConnection connection = new SqlConnection(connectionString))
  525. {
  526. DataSet ds = new DataSet();
  527. try
  528. {
  529. connection.Open();
  530. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  531. command.SelectCommand.CommandTimeout = Times;
  532. command.Fill(ds, "ds");
  533. }
  534. catch (System.Data.SqlClient.SqlException ex)
  535. {
  536. throw new Exception(ex.Message);
  537. }
  538. return ds;
  539. }
  540. }
  541.  
  542. #endregion
  543.  
  544. #region 执行带参数的SQL语句
  545.  
  546. /// <summary>
  547. /// 执行SQL语句,返回影响的记录数
  548. /// </summary>
  549. /// <param name="SQLString">SQL语句</param>
  550. /// <returns>影响的记录数</returns>
  551. public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
  552. {
  553. using (SqlConnection connection = new SqlConnection(connectionString))
  554. {
  555. using (SqlCommand cmd = new SqlCommand())
  556. {
  557. try
  558. {
  559. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  560. int rows = cmd.ExecuteNonQuery();
  561. cmd.Parameters.Clear();
  562. return rows;
  563. }
  564. catch (System.Data.SqlClient.SqlException e)
  565. {
  566. throw e;
  567. }
  568. }
  569. }
  570. }
  571.  
  572. /// <summary>
  573. /// 执行多条SQL语句,实现数据库事务。
  574. /// </summary>
  575. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  576. public static void ExecuteSqlTran(Hashtable SQLStringList)
  577. {
  578. using (SqlConnection conn = new SqlConnection(connectionString))
  579. {
  580. conn.Open();
  581. using (SqlTransaction trans = conn.BeginTransaction())
  582. {
  583. SqlCommand cmd = new SqlCommand();
  584. try
  585. {
  586. //循环
  587. foreach (DictionaryEntry myDE in SQLStringList)
  588. {
  589. string cmdText = myDE.Key.ToString();
  590. SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  591. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  592. int val = cmd.ExecuteNonQuery();
  593. cmd.Parameters.Clear();
  594. }
  595. trans.Commit();
  596. }
  597. catch
  598. {
  599. trans.Rollback();
  600. throw;
  601. }
  602. }
  603. }
  604. }
  605. /// <summary>
  606. /// 执行多条SQL语句,实现数据库事务。
  607. /// </summary>
  608. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  609. public static int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList)
  610. {
  611. using (SqlConnection conn = new SqlConnection(connectionString))
  612. {
  613. conn.Open();
  614. using (SqlTransaction trans = conn.BeginTransaction())
  615. {
  616. SqlCommand cmd = new SqlCommand();
  617. try
  618. { int count = ;
  619. //循环
  620. foreach (CommandInfo myDE in cmdList)
  621. {
  622. string cmdText = myDE.CommandText;
  623. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  624. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  625.  
  626. if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
  627. {
  628. if (myDE.CommandText.ToLower().IndexOf("count(") == -)
  629. {
  630. trans.Rollback();
  631. return ;
  632. }
  633.  
  634. object obj = cmd.ExecuteScalar();
  635. bool isHave = false;
  636. if (obj == null && obj == DBNull.Value)
  637. {
  638. isHave = false;
  639. }
  640. isHave = Convert.ToInt32(obj) > ;
  641.  
  642. if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
  643. {
  644. trans.Rollback();
  645. return ;
  646. }
  647. if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
  648. {
  649. trans.Rollback();
  650. return ;
  651. }
  652. continue;
  653. }
  654. int val = cmd.ExecuteNonQuery();
  655. count += val;
  656. if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == )
  657. {
  658. trans.Rollback();
  659. return ;
  660. }
  661. cmd.Parameters.Clear();
  662. }
  663. trans.Commit();
  664. return count;
  665. }
  666. catch
  667. {
  668. trans.Rollback();
  669. throw;
  670. }
  671. }
  672. }
  673. }
  674. /// <summary>
  675. /// 执行多条SQL语句,实现数据库事务。
  676. /// </summary>
  677. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  678. public static void ExecuteSqlTranWithIndentity(System.Collections.Generic.List<CommandInfo> SQLStringList)
  679. {
  680. using (SqlConnection conn = new SqlConnection(connectionString))
  681. {
  682. conn.Open();
  683. using (SqlTransaction trans = conn.BeginTransaction())
  684. {
  685. SqlCommand cmd = new SqlCommand();
  686. try
  687. {
  688. int indentity = ;
  689. //循环
  690. foreach (CommandInfo myDE in SQLStringList)
  691. {
  692. string cmdText = myDE.CommandText;
  693. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  694. foreach (SqlParameter q in cmdParms)
  695. {
  696. if (q.Direction == ParameterDirection.InputOutput)
  697. {
  698. q.Value = indentity;
  699. }
  700. }
  701. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  702. int val = cmd.ExecuteNonQuery();
  703. foreach (SqlParameter q in cmdParms)
  704. {
  705. if (q.Direction == ParameterDirection.Output)
  706. {
  707. indentity = Convert.ToInt32(q.Value);
  708. }
  709. }
  710. cmd.Parameters.Clear();
  711. }
  712. trans.Commit();
  713. }
  714. catch
  715. {
  716. trans.Rollback();
  717. throw;
  718. }
  719. }
  720. }
  721. }
  722. /// <summary>
  723. /// 执行多条SQL语句,实现数据库事务。
  724. /// </summary>
  725. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  726. public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
  727. {
  728. using (SqlConnection conn = new SqlConnection(connectionString))
  729. {
  730. conn.Open();
  731. using (SqlTransaction trans = conn.BeginTransaction())
  732. {
  733. SqlCommand cmd = new SqlCommand();
  734. try
  735. {
  736. int indentity = ;
  737. //循环
  738. foreach (DictionaryEntry myDE in SQLStringList)
  739. {
  740. string cmdText = myDE.Key.ToString();
  741. SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  742. foreach (SqlParameter q in cmdParms)
  743. {
  744. if (q.Direction == ParameterDirection.InputOutput)
  745. {
  746. q.Value = indentity;
  747. }
  748. }
  749. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  750. int val = cmd.ExecuteNonQuery();
  751. foreach (SqlParameter q in cmdParms)
  752. {
  753. if (q.Direction == ParameterDirection.Output)
  754. {
  755. indentity = Convert.ToInt32(q.Value);
  756. }
  757. }
  758. cmd.Parameters.Clear();
  759. }
  760. trans.Commit();
  761. }
  762. catch
  763. {
  764. trans.Rollback();
  765. throw;
  766. }
  767. }
  768. }
  769. }
  770. /// <summary>
  771. /// 执行一条计算查询结果语句,返回查询结果(object)。
  772. /// </summary>
  773. /// <param name="SQLString">计算查询结果语句</param>
  774. /// <returns>查询结果(object)</returns>
  775. public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
  776. {
  777. using (SqlConnection connection = new SqlConnection(connectionString))
  778. {
  779. using (SqlCommand cmd = new SqlCommand())
  780. {
  781. try
  782. {
  783. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  784. object obj = cmd.ExecuteScalar();
  785. cmd.Parameters.Clear();
  786. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  787. {
  788. return null;
  789. }
  790. else
  791. {
  792. return obj;
  793. }
  794. }
  795. catch (System.Data.SqlClient.SqlException e)
  796. {
  797. throw e;
  798. }
  799. }
  800. }
  801. }
  802.  
  803. /// <summary>
  804. /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  805. /// </summary>
  806. /// <param name="strSQL">查询语句</param>
  807. /// <returns>SqlDataReader</returns>
  808. public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
  809. {
  810. SqlConnection connection = new SqlConnection(connectionString);
  811. SqlCommand cmd = new SqlCommand();
  812. try
  813. {
  814. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  815. SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  816. cmd.Parameters.Clear();
  817. return myReader;
  818. }
  819. catch (System.Data.SqlClient.SqlException e)
  820. {
  821. throw e;
  822. }
  823. // finally
  824. // {
  825. // cmd.Dispose();
  826. // connection.Close();
  827. // }
  828.  
  829. }
  830.  
  831. /// <summary>
  832. /// 执行查询语句,返回DataSet
  833. /// </summary>
  834. /// <param name="SQLString">查询语句</param>
  835. /// <returns>DataSet</returns>
  836. public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
  837. {
  838. using (SqlConnection connection = new SqlConnection(connectionString))
  839. {
  840. SqlCommand cmd = new SqlCommand();
  841. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  842. using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  843. {
  844. DataSet ds = new DataSet();
  845. try
  846. {
  847. da.Fill(ds, "ds");
  848. cmd.Parameters.Clear();
  849. }
  850. catch (System.Data.SqlClient.SqlException ex)
  851. {
  852. throw new Exception(ex.Message);
  853. }
  854. return ds;
  855. }
  856. }
  857. }
  858.  
  859. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
  860. {
  861. if (conn.State != ConnectionState.Open)
  862. conn.Open();
  863. cmd.Connection = conn;
  864. cmd.CommandText = cmdText;
  865. if (trans != null)
  866. cmd.Transaction = trans;
  867. cmd.CommandType = CommandType.Text;//cmdType;
  868. if (cmdParms != null)
  869. {
  870.  
  871. foreach (SqlParameter parameter in cmdParms)
  872. {
  873. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  874. (parameter.Value == null))
  875. {
  876. parameter.Value = DBNull.Value;
  877. }
  878. cmd.Parameters.Add(parameter);
  879. }
  880. }
  881. }
  882.  
  883. #endregion
  884.  
  885. #region 存储过程操作
  886.  
  887. /// <summary>
  888. /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  889. /// </summary>
  890. /// <param name="storedProcName">存储过程名</param>
  891. /// <param name="parameters">存储过程参数</param>
  892. /// <returns>SqlDataReader</returns>
  893. public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
  894. {
  895. SqlConnection connection = new SqlConnection(connectionString);
  896. SqlDataReader returnReader;
  897. connection.Open();
  898. SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  899. command.CommandType = CommandType.StoredProcedure;
  900. returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
  901. return returnReader;
  902.  
  903. }
  904.  
  905. /// <summary>
  906. /// 执行存储过程
  907. /// </summary>
  908. /// <param name="storedProcName">存储过程名</param>
  909. /// <param name="parameters">存储过程参数</param>
  910. /// <param name="tableName">DataSet结果中的表名</param>
  911. /// <returns>DataSet</returns>
  912. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
  913. {
  914. using (SqlConnection connection = new SqlConnection(connectionString))
  915. {
  916. DataSet dataSet = new DataSet();
  917. connection.Open();
  918. SqlDataAdapter sqlDA = new SqlDataAdapter();
  919. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  920. sqlDA.Fill(dataSet, tableName);
  921. connection.Close();
  922. return dataSet;
  923. }
  924. }
  925. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)
  926. {
  927. using (SqlConnection connection = new SqlConnection(connectionString))
  928. {
  929. DataSet dataSet = new DataSet();
  930. connection.Open();
  931. SqlDataAdapter sqlDA = new SqlDataAdapter();
  932. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  933. sqlDA.SelectCommand.CommandTimeout = Times;
  934. sqlDA.Fill(dataSet, tableName);
  935. connection.Close();
  936. return dataSet;
  937. }
  938. }
  939.  
  940. /// <summary>
  941. /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
  942. /// </summary>
  943. /// <param name="connection">数据库连接</param>
  944. /// <param name="storedProcName">存储过程名</param>
  945. /// <param name="parameters">存储过程参数</param>
  946. /// <returns>SqlCommand</returns>
  947. private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  948. {
  949. SqlCommand command = new SqlCommand(storedProcName, connection);
  950. command.CommandType = CommandType.StoredProcedure;
  951. foreach (SqlParameter parameter in parameters)
  952. {
  953. if (parameter != null)
  954. {
  955. // 检查未分配值的输出参数,将其分配以DBNull.Value.
  956. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  957. (parameter.Value == null))
  958. {
  959. parameter.Value = DBNull.Value;
  960. }
  961. command.Parameters.Add(parameter);
  962. }
  963. }
  964.  
  965. return command;
  966. }
  967.  
  968. /// <summary>
  969. /// 执行存储过程,返回影响的行数
  970. /// </summary>
  971. /// <param name="storedProcName">存储过程名</param>
  972. /// <param name="parameters">存储过程参数</param>
  973. /// <param name="rowsAffected">影响的行数</param>
  974. /// <returns></returns>
  975. public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
  976. {
  977. using (SqlConnection connection = new SqlConnection(connectionString))
  978. {
  979. int result;
  980. connection.Open();
  981. SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
  982. rowsAffected = command.ExecuteNonQuery();
  983. result = (int)command.Parameters["ReturnValue"].Value;
  984. //Connection.Close();
  985. return result;
  986. }
  987. }
  988.  
  989. /// <summary>
  990. /// 创建 SqlCommand 对象实例(用来返回一个整数值)
  991. /// </summary>
  992. /// <param name="storedProcName">存储过程名</param>
  993. /// <param name="parameters">存储过程参数</param>
  994. /// <returns>SqlCommand 对象实例</returns>
  995. private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  996. {
  997. SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  998. command.Parameters.Add(new SqlParameter("ReturnValue",
  999. SqlDbType.Int, , ParameterDirection.ReturnValue,
  1000. false, , , string.Empty, DataRowVersion.Default, null));
  1001. return command;
  1002. }
  1003. #endregion
  1004.  
  1005. }
  1006.  
  1007. }

执行SQL的DbHelperSQL的更多相关文章

  1. sql server DbHelperSQL类

    using JKTAC_LMIS.Entity; using System; using System.Collections; using System.Collections.Generic; u ...

  2. SQL SERVER C#数据库操作类(连接、执行SQL)

    using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...

  3. 4.5 .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

  4. SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

    1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业 ...

  5. 三种执行SQL语句的的JAVA代码

    问题描述: 连接数据库,执行SQL语句是必不可少的,下面给出了三种执行不通SQL语句的方法. 1.简单的Statement执行SQL语句.有SQL注入,一般不使用. public static voi ...

  6. access基本操作(c#操作,远程连接,执行sql,加密,备份)

    前言 最近项目用到了access,是的就是access,工作在桌面型的小数据库应用还是会用到的,如果你确定永远不会遇到access的操作,请忽略此篇文章 1.vs配置access 既然是数据库,就少不 ...

  7. Entity Framework Code First执行SQL语句、视图及存储过程

    1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...

  8. spring boot 配置启动后执行sql, 中文乱码

    spring.datasource.schema指定启动后执行的sql文件位置. 我发现中文乱码,原因是没有指定执行sql script encoding: spring: datasource: u ...

  9. EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand

    前言 在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand:在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery ...

随机推荐

  1. Check类的validate方法解读

    此方法的实现如下: public void validate(JCTree tree, Env<AttrContext> env, boolean checkRaw) { Validato ...

  2. Python -- 网络编程 -- 抓取网页图片 -- 图虫网

    字符串(str)编码成字节码(bytes),字节码解码为字符串 获取当前环境编码:sys.stdin.encoding url编码urllib.parse.quote() url解码urllib.pa ...

  3. ELK日志系统之通用应用程序日志接入方案

    前边有两篇ELK的文章分别介绍了MySQL慢日志收集和Nginx访问日志收集,那么各种不同类型应用程序的日志该如何方便的进行收集呢?且看本文我们是如何高效处理这个问题的 日志规范 规范的日志存放路径和 ...

  4. paxos协议更新日志

    基于Paxos协议的数据同步与传统主备方式最大的区别在与Paxos只需任意超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失. Basic paxos协议更新日志 我们将数据持久 ...

  5. 糗事之 -- 用ssh公钥实现免密码登录

    前言:工作原因,每天都会登录好多次服务器,每次都是ssh root@192.168..... 然后输入密码,来来回回输几次真是很烦啊. 问题:怎么可以在每次ssh连接服务器时不用输入密码,直接登录? ...

  6. Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)

    出自  http://www.jb51.net/article/93125.htm

  7. The type org.springframework.jms.JmsException cannot be resolved报错解决

    在调用JmsTemplate的send方法时,一直报编译时异常.如下: 异常提示是无法解析org.SpringFrawork.jms.JmsException类型.如下: The type org.s ...

  8. sqlserver数据导入导出问题

    sqlserver,如果用结果另存为,导出txt数据,然后在导入数据库,有时候会出问题,很难解决. 但是全选,右击,复制到自己创建的txt里面,在导入数据,就不会有问题的. 神奇,不知道为什么,但是能 ...

  9. 使用jQuery和CSS3制作数字时钟(jQuery篇) 附源码下载

    HTML 和上一篇文章:使用jQuery和CSS3制作数字时钟(CSS3篇)一样的HTML结构,只是多了个>date用来展示日期和星期的. <div id="clock" ...

  10. mybatis循环生成前后缀:mapper.xml的<trim></trim>

    *在mapper.xml中<trim prefix="(" suffix=")" suffixOverrides="," prefix ...