SQLServer数据库访问帮助类

这里有一个Mysql帮助类的使用例子可以参考(大同小异)

写了一个Mysql的例子,SQLServer的差不多,一样的

C#简单三层结构设计UI、BLL、DAL

1.web.config配置数据库连接字符串

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <appSettings>
  4. <!-- 连接字符串是否加密 -->
  5. <add key="ConStringEncrypt" value="false"/>
  6. <!-- 数据库连接字符串,(如果采用加密方式,上面一项要设置为true;加密工具,可在官方下载,
  7. 如果使用明文这样server=127.0.0.1;database=.....,上面则设置为false。 -->
  8. <add key="ConnectionString" value="server=127.0.0.1;database=BenXHCMS;uid=sa;pwd=jyf"/>
  9. </appSettings>
  10. </configuration>

2.数据库字符串读取类(多一个加密算法,可以自己添加)

  1. public class PubConstant
  2. {
  3. /// <summary>
  4. /// 获取连接字符串
  5. /// </summary>
  6. public static string ConnectionString
  7. {
  8. get
  9. {
  10. string _connectionString = ConfigurationManager.AppSettings["ConnectionString"];
  11. string ConStringEncrypt = ConfigurationManager.AppSettings["ConStringEncrypt"];
  12. if (ConStringEncrypt == "true")
  13. {
  14. _connectionString = DESEncrypt.Decrypt(_connectionString);
  15. }
  16. return _connectionString;
  17. }
  18. }
  19.  
  20. /// <summary>
  21. /// 得到web.config里配置项的数据库连接字符串。
  22. /// </summary>
  23. /// <param name="configName"></param>
  24. /// <returns></returns>
  25. public static string GetConnectionString(string configName)
  26. {
  27. string connectionString = ConfigurationManager.AppSettings[configName];
  28. string ConStringEncrypt = ConfigurationManager.AppSettings["ConStringEncrypt"];
  29. if (ConStringEncrypt == "true")
  30. {
  31. connectionString = DESEncrypt.Decrypt(connectionString);
  32. }
  33. return connectionString;
  34. }
  35.  
  36. }

3.SQLServer数据库访问类

  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. }

C#访问SQLServer数据库访问帮助类的更多相关文章

  1. 自己整理的一个访问SQLite3数据库的C++类

    原文地址:自己整理的一个访问SQLite3数据库的C++类作者:vigra 近日,对SQLite3的使用进行了研究.真不愧是优秀的嵌入数据库,API接口也极其简捷.基本上只要使用以下几个接口就能完成数 ...

  2. NX二次开发-NX访问SqlServer数据库(增删改查)C#版

    版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...

  3. VS2019项目docker启动且访问SQLSERVER数据库配置

    VS2019编译.调试的Blazor纯前台项目,使用控制台启动,去连接纯后台的API项目,使用docker启动,并且通过EFCore访问SQLSERVER数据库,有几个地方需要修改配置: 一.前台连后 ...

  4. 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

    在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...

  5. 外网访问SQLServer数据库holer实现

    外网访问内网SQLServer数据库 内网主机上安装了SQLServer数据库,只能在局域网内访问,怎样从公网也能访问本地SQLServer数据库? 本文将介绍使用holer实现的具体步骤. 1. 准 ...

  6. Oracle透明网关访问SQLServer数据库

    针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...

  7. SQLserver数据库操作帮助类SqlHelper

    1 SqlHelper源码 using System; using System.Data; using System.Xml; using System.Data.SqlClient; using ...

  8. [转]html5 js 访问 sqlite 数据库的操作类

    本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...

  9. servlet层调用biz业务层出现浏览器 500错误,解决方法 dao数据访问层 数据库Util工具类都可能出错 通过新建一个测试类复制代码逐步测试查找出最终出错原因

    package com.swift.jztk.servlet; import java.io.IOException; import javax.servlet.ServletException; i ...

随机推荐

  1. Java虚拟机性能管理神器 - VisualVM(1) 简介 - JVM轻量级监控分析神器

    目录(?)[-] 一VisualVM是什么 二如何获取VisualVM 三获取那个版本 四VisualVM能做什么 显示JAVA应用程序配置和运行时环境 显示本地和远程JAVA应用程序运行状态 监控应 ...

  2. Mac Terminal菜鸟篇之使用unrar解压rar文件

    安装: $ brew install unrar 使用: $ unrar x Httpclient_jar.rar $ unrar e Httpclient_jar.rar # 或者用参数e也行

  3. 如何找回Ucenter创始人密码,账号无需修改

    UCenter 创始人的密码非常重要,忘记或丢失后,就不能进入 UCenter 进行用户和数据的管理,也会对站点造成安全隐患.由于 UCenter 的密码是采用两次 md5 加一个随机数的形式加密的, ...

  4. Solaris 11中的变化

    Solaris 11发布了好几个月了,用了后感觉好多配置的东东变化不小,写写自己遇到的问题和大家分享一下, 1,如何设置root密码 Solaris 11中root作为一个Role来存在,已经不能直接 ...

  5. Ruby gem: Mac 系统下的安装与更新

    官方链接:https://rubygems.org/pages/download#formats 下载安装: 1.点击上面链接进入到官网,从顶部的链接下载压缩包: 2.解压缩到指定文件夹,并通过 “c ...

  6. excel做回归分析的应用【风控数据分析】

    方法1     统计逻辑:统计一个loginname的所有去重的通讯录数C,统计这个Loginname对应的每个设备对应的通讯录c1,c2,c3…cn; X=(c1/c+c2/c+c3/c+….cn/ ...

  7. gridview列超链接的几种设置方法

    <asp:GridView ID="GridView1" runat="server" Width="100%" AutoGenera ...

  8. YFCMF 问题

    1.菜单不见了,yf.php  (main 改为0 ) function tagMenu $parseStr .='echo get_menu("main","'.$to ...

  9. 【搞笑签名】390个qq个性昵称或签名,周末前娱乐一下

    1 来瓶82年的矿泉水 2 名不正则言承旭 3 天涯何处无芳草,还是母乳喂养好 4 她的妈妈不爱我 5 你丫的 6 农夫三拳 7 猪嚼在恋√痛 8 马驴脸猛鹿 9 小白兔兽性大发 10 曰捣一乱 11 ...

  10. 03-Linux各目录及每个目录的详细介绍

    Linux各目录及每个目录的详细介绍 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所 ...