首先,需要连接SQLServer数据库的服务器名称server、数据库名database、数据库用户名uid以及密码pwd,如下图:

然后需要以下数据库SQL代码段,还有一个myHelper.cs代码,粘贴复制即可:

DbHelperSQL.cs代码:

注意要更改红框中的内容

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

CommandInfo.cs代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient; namespace MTBug.sqlHelper
{ public enum EffentNextType
{
/// <summary>
/// 对其他语句无任何影响
/// </summary>
None,
/// <summary>
/// 当前语句必须为"select count(1) from .."格式,如果存在则继续执行,不存在回滚事务
/// </summary>
WhenHaveContine,
/// <summary>
/// 当前语句必须为"select count(1) from .."格式,如果不存在则继续执行,存在回滚事务
/// </summary>
WhenNoHaveContine,
/// <summary>
/// 当前语句影响到的行数必须大于0,否则回滚事务
/// </summary>
ExcuteEffectRows,
/// <summary>
/// 引发事件-当前语句必须为"select count(1) from .."格式,如果不存在则继续执行,存在回滚事务
/// </summary>
SolicitationEvent
}
public class CommandInfo
{
public object ShareObject = null;
public object OriginalData = null;
event EventHandler _solicitationEvent;
public event EventHandler SolicitationEvent
{
add
{
_solicitationEvent += value;
}
remove
{
_solicitationEvent -= value;
}
}
public void OnSolicitationEvent()
{
if (_solicitationEvent != null)
{
_solicitationEvent(this, new EventArgs());
}
}
public string CommandText;
public System.Data.Common.DbParameter[] Parameters;
public EffentNextType EffentNextType = EffentNextType.None;
public CommandInfo()
{ }
public CommandInfo(string sqlText, SqlParameter[] para)
{
this.CommandText = sqlText;
this.Parameters = para;
}
public CommandInfo(string sqlText, SqlParameter[] para, EffentNextType type)
{
this.CommandText = sqlText;
this.Parameters = para;
this.EffentNextType = type;
}
}
}

myHelper.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO; namespace MTBug
{
public static class myHelper
{
public delegate void ShowWarnMessage(string _str);
public static event ShowWarnMessage showWarnMessage;
public static string xmlPath = System.Environment.CurrentDirectory + "\\Resources\\Config.xml";
public static void mySendMessageToMainWindow(string _str)
{
if (showWarnMessage != null)
{
showWarnMessage(_str);
}
} public static string getXMLValue(string eleName)
{
try
{
XmlDocument xmlDoc1 = new XmlDocument();
xmlDoc1.Load(xmlPath);
var root = xmlDoc1.DocumentElement;
XmlNode nodes = xmlDoc1.SelectSingleNode("//" + eleName); if (nodes != null)
{
xmlDoc1.Save(xmlPath);
return nodes.InnerText.ToString();
}
else
{
XmlElement xe1 = xmlDoc1.CreateElement(eleName);//创建一个<hospitalName>节点
xe1.InnerText = "";
root.AppendChild(xe1);
xmlDoc1.Save(xmlPath);
return "";
}
}
catch (Exception tt)
{
myHelper.errorLogAdd(tt.Message);
return "";
}
} public static void errorLogAdd(string _str)
{
try
{
_str = DateTime.Now.ToString("yyyyMMddhhmmss") + "-" + _str;
if (System.IO.File.Exists("C://errorLog.txt"))
{
StreamWriter sw = new StreamWriter("C://errorLog.txt", true, Encoding.GetEncoding("gb2312"));
sw.WriteLine(_str);
sw.Flush();
sw.Close();
}
else
{
FileStream fs1 = new FileStream("C://errorLog.txt", FileMode.Create, FileAccess.Write);//创建 StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(_str);
sw.Flush();
sw.Close();
fs1.Close();
}
}
catch { } }
}
}

完成以上步骤之后,在MainWindow.xaml中添加增、删、改三个按钮:

        <Canvas x:Name="c_sql" Width="500" Height="150" Canvas.Left="50" Canvas.Top="800" Background="SkyBlue">
<Label x:Name="label1" Height="30" Width="120" Content="数据库SQL更改" FontFamily="Berlin Sans FB" FontSize="16"/>
<Button Canvas.Left="50" Canvas.Top="50" Content="添加" Height="60" Name="button1" Width="100" Click="button1_Click" FontSize="20"/>
<Button Canvas.Left="200" Canvas.Top="50" Content="删除" Height="60" Name="button2" Width="100" Click="button2_Click" FontSize="20"/>
<Button Canvas.Left="350" Canvas.Top="50" Content="更新" Height="60" Name="button3" Width="100" Click="button3_Click" FontSize="20"/>
</Canvas>

项目中新建一个类test.cs,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data; namespace MTBug.sqlHelper
{
[Serializable]
public partial class test
{
public test()
{ } #region Model private int _ids;
private string _name; public int ids
{
set{ _ids = value;}
get{ return _ids;}
} public string name
{
set{ _name = value;}
get{ return _name;}
} #endregion Model #region Model /// <summary>
/// 增加一条数据
/// </summary> public int Add(int ids, string username)
{ ////string _str = "insert into [test] (ids,name) values (" + ids.ToString() + "," + "'"+username.ToString()+"'" + ");";
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into [test] (");
strSql.Append(" ids,name) ");
strSql.Append(" values (");
strSql.Append(" @ids,@name)"); SqlParameter[] parameters = {
new SqlParameter("@ids", SqlDbType.Int,),
new SqlParameter("@name", SqlDbType.VarChar,)};
parameters[].Value = ids;
parameters[].Value = username; //StringBuilder strSql = new StringBuilder();
//strSql.Append("insert into [test] (");
//strSql.Append(" ids,name) values ( ");
//strSql.Append("@ids,@name)"); //SqlParameter[] parameters = {
// new SqlParameter("@ids", SqlDbType.Int,4),
// new SqlParameter("@name", SqlDbType.VarChar,20)}; //parameters[0].Value = ids;
//parameters[1].Value = username; object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
if (obj == null)
{
return ;
}
else
{
return Convert.ToInt32(obj);
}
} /// <summary>
/// 删除一条数据
/// </summary>
public bool Delete(int ids)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("delete from [test] ");
strSql.Append(" where ids=" + ids.ToString()); int rows = DbHelperSQL.ExecuteSql(strSql.ToString());
if (rows > )
{
return true;
}
else
{
return false;
}
} /// <summary>
/// 更新一条数据
/// </summary>
public bool Update(int ids, string username)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("update [test] set ");
strSql.Append("name=@name ");
strSql.Append(" where ids=@ids ");
SqlParameter[] parameters = {
new SqlParameter("@ids", SqlDbType.Int,),
new SqlParameter("@name", SqlDbType.VarChar,)};
parameters[].Value = ids;
parameters[].Value = username; int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
if (rows > )
{
return true;
}
else
{
return false;
}
} #endregion Model }
}

test代码中定义如何对数据库进行增删改数据的方法。

最后,在MainWindow.xaml.cs后台代码中设置,三个按钮的点击事件:

        private void button1_Click(object sender, RoutedEventArgs e)
{
///点击往test表里随机插入一条数据
///
test _u = new test();
int _ds = _u.Add(, "你好");
} private void button2_Click(object sender, RoutedEventArgs e)
{
test _u = new test();
bool _ds = _u.Delete();
} private void button3_Click(object sender, RoutedEventArgs e)
{
test _u = new test();
bool _ds = _u.Update(, "欧文");
}

查看数据库的表test,数据就可以增删改了。

===================================================

出错地点总结:

①增删改数据库的方法类型要与相对应的方法类型一致:

对比:

②传递的参数要对应:

③编写sql语句要正确,尤其字符串要加上,单引号‘’。

例:insert into [MTBugList].[dbo].[test] (ids,name) values (3,'你好');

④有两种C#sql语句的写法:

第一种:

        /// <summary>
/// 增加一条数据
/// </summary> public int Add(int ids, string username)
{
string _str = "insert into [test] (ids,name) values (" + ids.ToString() + "," + "'" + username.ToString() + "'" + ");";
object obj = DbHelperSQL.GetSingle(_str.ToString());
if (obj == null)
{
return ;
}
else
{
return Convert.ToInt32(obj);
}
}

第二种:

        /// <summary>
/// 增加一条数据
/// </summary> public int Add(int ids, string username)
{ StringBuilder strSql = new StringBuilder();
strSql.Append("insert into [test] (");
strSql.Append(" ids,name) ");
strSql.Append(" values (");
strSql.Append(" @ids,@name)"); SqlParameter[] parameters = {
new SqlParameter("@ids", SqlDbType.Int,),
new SqlParameter("@name", SqlDbType.VarChar,)};
parameters[].Value = ids;
parameters[].Value = username; object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
if (obj == null)
{
return ;
}
else
{
return Convert.ToInt32(obj);
}
}

⑤注意④中含多个字段时,parameters[?].Value要随着更改。

【WPF学习笔记】之如何通过后台C#代码添加(增/删/改按钮)实现对SQLServer数据库数据的更改的更多相关文章

  1. WPF学习笔记(四):AvalonEdit 代码高亮编辑控件专题

    AvalonEdit 是一个基于 WPF 的文本编辑器组件.它是由 Daniel Grunwald 为 SharpDevelop 编写的.从 5.0 版开始,AvalonEdit 根据MIT许可证发布 ...

  2. WPF学习笔记-用Expression Design制作矢量图然后导出为XAML

    WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...

  3. WPF 学习笔记-在WPF下创建托盘图标

    原文:WPF 学习笔记-在WPF下创建托盘图标 首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Co ...

  4. WPF 学习笔记-设置属性使窗口不可改变大小

    原文:WPF 学习笔记-设置属性使窗口不可改变大小 调整Windows下的ResizeMode属性: ResizeMode = NoResize Resize属性是控制Windows是否可以改变大小, ...

  5. WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决

    原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...

  6. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  7. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  8. 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)

    (应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...

  9. WPF学习笔记1---初接触

    刚刚接触WPF,微软的一套东西.WPF最大的特点就是UI设计与代码逻辑的完全剥离.这样美工和程序员的分工就变得非常清楚.因为界面和程序的耦合度很低,也增加的代码的灵活性和可重用性. 微软为WPF的UI ...

随机推荐

  1. Console.Write格式化输出

    原文发布时间为:2009-03-02 -- 来源于本人的百度文章 [由搬家工具导入] C 或 c货币Console.Write("{0:C}", 2.5);   //$2.50Co ...

  2. AspNetPager分页控件的使用以及常见错误

    原文发布时间为:2009-05-25 -- 来源于本人的百度文章 [由搬家工具导入] 【Repeater采用AspNetPager分页成功↓】 using System;using System.Co ...

  3. poi导出excel文件(桃)

    1.基本可以通用的工具类 package com.idcsol.apps.common.excel; import java.io.IOException; import java.io.Output ...

  4. HTTP Header中Accept-Encoding

    HTTP Header中Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型[1]  常见的有 Accept-Encoding: compress, gzip //支持comp ...

  5. 教学生jni编程(一)

    我的所有文件的目录在/home/michelle/WORKM/DAYCODE/day0426/,请根据个人情况适当调整 1)创建一个HelloWorld.Java文件,如下: public class ...

  6. c语言命令行参数

    int main(int argc, char * argv[]) { ..... } argc: 代表启动程序时,命令行参数的个数.C和C++语言规定,可执行程序程序本身的文件名,也算是一个命令行参 ...

  7. IOS view的圆角和阴影并存

    记录一下这个简单但又难搞的问题,如何设置 view的圆角和阴影并存 UIView *v=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 100, 100 ...

  8. HDU 1241.Oil Deposits-求连通块DFS or BFS

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  9. 初探Java类型擦除

    本篇博客主要介绍了Java类型擦除的定义,详细的介绍了类型擦除在Java中所出现的场景. 1. 什么是类型擦除 为了让你们快速的对类型擦除有一个印象,首先举一个很简单也很经典的例子. // 指定泛型为 ...

  10. Linux下Shell脚本字符串单引号、双引号、反引号、反斜杠的作用和区别

    一.单引号 str='this is a string' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行) ...