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

@数据列表插入操作:

c# 代码
  1. public void GetDateList()
  2. {
  3. string table = "Users";
  4. string where = " 1=1 ";
  5. AspNetPager1.RecordCount = DbHelperSQL.GetDataRecordCount("UserID", table, where);//统计行数
  6. DataTable dt = DbHelperSQL.GetPageDataList("UserID", "*", table, where, "id desc", AspNetPager1.PageSize, AspNetPager1.CurrentPageIndex).Tables[0];//这里面的ASPNETPAGER是一个分页控件,网上很多很通用的
  7. this.GVList.DataSource = dt;
  8. this.GVList.DataBind();
  9. }

@插入操作【我这里用到的是存储过程】

c# 代码
  1. /// <summary>
  2. /// 用途:向表TB_Article新增记录
  3. /// 时间:2007/9/17
  4. /// 创建人:陈峰
  5. /// </summary>
  6. /// <param name="AttributeID">属性ID</param>
  7. /// <param name="TeamBuyInfoID">团购活动ID</param>
  8. /// <param name="Title">标题</param>
  9. /// <param name="Content">内容</param>
  10. /// <param name="MemberName">发表人</param>
  11. /// <param name="MemberID">发表者ID</param>
  12. /// <returns></returns>
  13. public string InsertTB_Article(int AttributeID, string Links, int TeamBuyInfoID, string Title, string Content, string MemberName, int MemberID)
  14. {
  15. IDataParameter[] p = new IDataParameter[7];
  16. p[0] = new SqlParameter("AttributeID", AttributeID);
  17. p[1] = new SqlParameter("Links", Links);
  18. p[2] = new SqlParameter("TeamBuyInfoID", TeamBuyInfoID);
  19. p[3] = new SqlParameter("Title", Title);
  20. p[4] = new SqlParameter("Content", Content);
  21. p[5] = new SqlParameter("MemberName", MemberName);
  22. p[6] = new SqlParameter("MemberID", MemberID);
  23. return DbHelperSQL.RunProcedureState("Proc_Add_TB_Article", p);
  24. }

另外我里面有3个分页程序,2个是需要用到存储过程,另一个是由ACCESS演化而来,效率上不比存储过程差

sql 代码
  1. CREATE Procedure P_viewPage
  2. /* Param List */
  3. @TableNames VARCHAR(200),    --表名,可以是多个表,但不能用别名
  4. @PrimaryKey VARCHAR(100),    --主键,可以为空,但@Order为空时该值不能为空
  5. @Fields    VARCHAR(200),        --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
  6. @PageSize INT,            --每页记录数
  7. @CurrentPage INT,        --当前页,0表示第1页
  8. @Filter VARCHAR(200) = '',    --条件,可以为空,不用填 where
  9. @Group VARCHAR(200) = '',    --分组依据,可以为空,不用填 group by
  10. @Order VARCHAR(200) = ''    --排序,可以为空,为空默认按主键升序排列,不用填 order by
  11. AS
  12. BEGIN
  13. DECLARE @SortColumn VARCHAR(200)
  14. DECLARE @Operator CHAR(2)
  15. DECLARE @SortTable VARCHAR(200)
  16. DECLARE @SortName VARCHAR(200)
  17. IF @Fields = ''
  18. SET @Fields = '*'
  19. IF @Filter = ''
  20. SET @Filter = 'WHERE 1=1'
  21. ELSE
  22. SET @Filter = 'WHERE ' +  @Filter
  23. IF @Group <>''
  24. SET @Group = 'GROUP BY ' + @Group
  25. IF @Order <> ''
  26. BEGIN
  27. DECLARE @pos1 INT, @pos2 INT
  28. SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')
  29. IF CHARINDEX(' DESC', @Order) > 0
  30. IF CHARINDEX(' ASC', @Order) > 0
  31. BEGIN
  32. IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)
  33. SET @Operator = '<='
  34. ELSE
  35. SET @Operator = '>='
  36. END
  37. ELSE
  38. SET @Operator = '<='
  39. ELSE
  40. SET @Operator = '>='
  41. SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')
  42. SET @pos1 = CHARINDEX(',', @SortColumn)
  43. IF @pos1 > 0
  44. SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)
  45. SET @pos2 = CHARINDEX('.', @SortColumn)
  46. IF @pos2 > 0
  47. BEGIN
  48. SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)
  49. IF @pos1 > 0
  50. SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)
  51. ELSE
  52. SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)
  53. END
  54. ELSE
  55. BEGIN
  56. SET @SortTable = @TableNames
  57. SET @SortName = @SortColumn
  58. END
  59. END
  60. ELSE
  61. BEGIN
  62. SET @SortColumn = @PrimaryKey
  63. SET @SortTable = @TableNames
  64. SET @SortName = @SortColumn
  65. SET @Order = @SortColumn
  66. SET @Operator = '>='
  67. END
  68. DECLARE @type varchar(50)
  69. DECLARE @prec int
  70. SELECT @type=t.name, @prec=c.prec
  71. FROM sysobjects o
  72. JOIN syscolumns c on o.id=c.id
  73. JOIN systypes t on c.xusertype=t.xusertype
  74. WHERE o.name = @SortTable AND c.name = @SortName
  75. IF CHARINDEX('char', @type) > 0
  76. SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
  77. DECLARE @TopRows INT
  78. SET @TopRows = @PageSize * @CurrentPage +1
  79. print @TopRows
  80. print @Operator
  81. EXEC('
  82. DECLARE @SortColumnBegin ' + @type + '
  83. SET ROWCOUNT ' + @TopRows + '
  84. SELECT @SortColumnBegin=' + @SortColumn + ' FROM  ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '
  85. SET ROWCOUNT ' + @PageSize + '
  86. SELECT ' + @Fields + ' FROM  ' + @TableNames + ' ' + @Filter  + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '
  87. ')
  88. END
  89. GO
  90. SET QUOTED_IDENTIFIER OFF
  91. GO
  92. SET ANSI_NULLS ON
  93. GO
  94. SET QUOTED_IDENTIFIER ON
  95. GO
  96. SET ANSI_NULLS OFF
  97. GO
  98. CREATE PROC P_viewPage2
  99. /*
  100. nzperfect [no_mIss] 高效通用分页存储过程(双向检索) 2007.5.7  QQ:34813284
  101. 敬告:适用于单一主键或存在唯一值列的表或视图
  102. ps:Sql语句为8000字节,调用时请注意传入参数及sql总长度不要超过指定范围
  103. */
  104. @TableName VARCHAR(200),     --表名
  105. @FieldList VARCHAR(2000),    --显示列名,如果是全部字段则为*
  106. @PrimaryKey VARCHAR(100),    --单一主键或唯一值键
  107. @Where VARCHAR(2000),        --查询条件 不含'where'字符,如id>10 and len(userid)>9
  108. @Order VARCHAR(1000),        --排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc
  109. --注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷
  110. @SortType INT,               --排序规则 1:正序asc 2:倒序desc 3:多列排序方法
  111. @RecorderCount INT,          --记录总数 0:会返回总记录
  112. @PageSize INT,               --每页输出的记录数
  113. @PageIndex INT,              --当前页数
  114. @TotalCount INT OUTPUT,      --记返回总记录
  115. @TotalPageCount INT OUTPUT   --返回总页数
  116. AS
  117. SET NOCOUNT ON
  118. IF ISNULL(@TotalCount,'') = '' SET @TotalCount = 0
  119. SET @Order = RTRIM(LTRIM(@Order))
  120. SET @PrimaryKey = RTRIM(LTRIM(@PrimaryKey))
  121. SET @FieldList = REPLACE(RTRIM(LTRIM(@FieldList)),' ','')
  122. WHILE CHARINDEX(', ',@Order) > 0 OR CHARINDEX(' ,',@Order) > 0
  123. BEGIN
  124. SET @Order = REPLACE(@Order,', ',',')
  125. SET @Order = REPLACE(@Order,' ,',',')
  126. END
  127. IF ISNULL(@TableName,'') = '' OR ISNULL(@FieldList,'') = ''
  128. OR ISNULL(@PrimaryKey,'') = ''
  129. OR @SortType < 1 OR @SortType >3
  130. OR @RecorderCount  < 0 OR @PageSize < 0 OR @PageIndex < 0
  131. BEGIN
  132. PRINT('ERR_00')
  133. RETURN
  134. END
  135. IF @SortType = 3
  136. BEGIN
  137. IF (UPPER(RIGHT(@Order,4))!=' ASC' AND UPPER(RIGHT(@Order,5))!=' DESC')
  138. BEGIN PRINT('ERR_02') RETURN END
  139. END
  140. DECLARE @new_where1 VARCHAR(1000)
  141. DECLARE @new_where2 VARCHAR(1000)
  142. DECLARE @new_order1 VARCHAR(1000)
  143. DECLARE @new_order2 VARCHAR(1000)
  144. DECLARE @new_order3 VARCHAR(1000)
  145. DECLARE @Sql VARCHAR(8000)
  146. DECLARE @SqlCount NVARCHAR(4000)
  147. IF ISNULL(@where,'') = ''
  148. BEGIN
  149. SET @new_where1 = ' '
  150. SET @new_where2 = ' WHERE  '
  151. END
  152. ELSE
  153. BEGIN
  154. SET @new_where1 = ' WHERE ' + @where
  155. SET @new_where2 = ' WHERE ' + @where + ' AND '
  156. END
  157. IF ISNULL(@order,'') = '' OR @SortType = 1  OR @SortType = 2
  158. BEGIN
  159. IF @SortType = 1
  160. BEGIN
  161. SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' ASC'
  162. SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' DESC'
  163. END
  164. IF @SortType = 2
  165. BEGIN
  166. SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' DESC'
  167. SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' ASC'
  168. END
  169. END
  170. ELSE
  171. BEGIN
  172. SET @new_order1 = ' ORDER BY ' + @Order
  173. END
  174. IF @SortType = 3 AND  CHARINDEX(','+@PrimaryKey+' ',','+@Order)>0
  175. BEGIN
  176. SET @new_order1 = ' ORDER BY ' + @Order
  177. SET @new_order2 = @Order + ','
  178. SET @new_order2 = REPLACE(REPLACE(@new_order2,'ASC,','{ASC},'),'DESC,','{DESC},')
  179. SET @new_order2 = REPLACE(REPLACE(@new_order2,'{ASC},','DESC,'),'{DESC},','ASC,')
  180. SET @new_order2 = ' ORDER BY ' + SUBSTRING(@new_order2,1,LEN(@new_order2)-1)
  181. IF @FieldList <> '*'
  182. BEGIN
  183. SET @new_order3 = REPLACE(REPLACE(@Order + ',','ASC,',','),'DESC,',',')
  184. SET @FieldList = ',' + @FieldList
  185. WHILE CHARINDEX(',',@new_order3)>0
  186. BEGIN
  187. IF CHARINDEX(SUBSTRING(','+@new_order3,1,CHARINDEX(',',@new_order3)),','+@FieldList+',')>0
  188. BEGIN
  189. SET @FieldList =
  190. @FieldList + ',' + SUBSTRING(@new_order3,1,CHARINDEX(',',@new_order3))
  191. END
  192. SET @new_order3 =
  193. SUBSTRING(@new_order3,CHARINDEX(',',@new_order3)+1,LEN(@new_order3))
  194. END
  195. SET @FieldList = SUBSTRING(@FieldList,2,LEN(@FieldList))
  196. END
  197. END
  198. SET @SqlCount = 'SELECT @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/'
  199. + CAST(@PageSize AS VARCHAR)+') FROM ' + @TableName + @new_where1
  200. BEGIN
  201. EXEC SP_EXECUTESQL @SqlCount,N'@TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT',
  202. @TotalCount OUTPUT,@TotalPageCount OUTPUT
  203. END
  204. IF @PageIndex > CEILING((@TotalCount+0.0)/@PageSize)
  205. BEGIN
  206. SET @PageIndex =  CEILING((@TotalCount+0.0)/@PageSize)
  207. END
  208. IF @PageIndex = 1 OR @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize)
  209. BEGIN
  210. IF @PageIndex = 1 --返回第一页数据
  211. BEGIN
  212. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
  213. + @TableName + @new_where1 + @new_order1
  214. END
  215. IF @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize)  --返回最后一页数据
  216. BEGIN
  217. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
  218. + 'SELECT TOP ' + STR(ABS(@PageSize*@PageIndex-@TotalCount-@PageSize))
  219. + ' ' + @FieldList + ' FROM '
  220. + @TableName + @new_where1 + @new_order2 + ' ) AS TMP '
  221. + @new_order1
  222. END
  223. END
  224. ELSE
  225. BEGIN
  226. IF @SortType = 1  --仅主键正序排序
  227. BEGIN
  228. IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2  --正向检索
  229. BEGIN
  230. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
  231. + @TableName + @new_where2 + @PrimaryKey + ' > '
  232. + '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '
  233. + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
  234. + ' FROM ' + @TableName
  235. + @new_where1 + @new_order1 +' ) AS TMP) '+ @new_order1
  236. END
  237. ELSE  --反向检索
  238. BEGIN
  239. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
  240. + 'SELECT TOP ' + STR(@PageSize) + ' '
  241. + @FieldList + ' FROM '
  242. + @TableName + @new_where2 + @PrimaryKey + ' < '
  243. + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
  244. + STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey
  245. + ' FROM ' + @TableName
  246. + @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2
  247. + ' ) AS TMP ' + @new_order1
  248. END
  249. END
  250. IF @SortType = 2  --仅主键反序排序
  251. BEGIN
  252. IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2  --正向检索
  253. BEGIN
  254. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
  255. + @TableName + @new_where2 + @PrimaryKey + ' < '
  256. + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
  257. + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
  258. +' FROM '+ @TableName
  259. + @new_where1 + @new_order1 + ') AS TMP) '+ @new_order1
  260. END
  261. ELSE  --反向检索
  262. BEGIN
  263. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
  264. + 'SELECT TOP ' + STR(@PageSize) + ' '
  265. + @FieldList + ' FROM '
  266. + @TableName + @new_where2 + @PrimaryKey + ' > '
  267. + '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '
  268. + STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey
  269. + ' FROM ' + @TableName
  270. + @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2
  271. + ' ) AS TMP ' + @new_order1
  272. END
  273. END
  274. IF @SortType = 3  --多列排序,必须包含主键,且放置最后,否则不处理
  275. BEGIN
  276. IF CHARINDEX(',' + @PrimaryKey + ' ',',' + @Order) = 0
  277. BEGIN PRINT('ERR_02') RETURN END
  278. IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2  --正向检索
  279. BEGIN
  280. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
  281. + 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
  282. + ' SELECT TOP ' + STR(@PageSize*@PageIndex) + ' ' + @FieldList
  283. + ' FROM ' + @TableName + @new_where1 + @new_order1 + ' ) AS TMP '
  284. + @new_order2 + ' ) AS TMP ' + @new_order1
  285. END
  286. ELSE  --反向检索
  287. BEGIN
  288. SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
  289. + 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
  290. + ' SELECT TOP ' + STR(@TotalCount-@PageSize *@PageIndex+@PageSize) + ' ' + @FieldList
  291. + ' FROM ' + @TableName + @new_where1 + @new_order2 + ' ) AS TMP '
  292. + @new_order1 + ' ) AS TMP ' + @new_order1
  293. END
  294. END
  295. END
  296. EXEC(@Sql)
  297. GO
  298. SET QUOTED_IDENTIFIER OFF
  299. GO
  300. SET ANSI_NULLS ON

转载于:https://www.cnblogs.com/liufei88866/archive/2009/06/26/1511605.html

MSSQL数据库C#操作类(SQLHELPER类的修改版)相关推荐

  1. .net mysql sqlhelper_「谢灿asp.net三层架构」5、DAL中公共类-SqlHelper类应该这样写

    <谢灿asp.net三层架构>系列教程由小灿灿IT首发百度平台,希望对各位喜欢计算机的同学有所帮助!关注+分享+评论+点赞,是对我们最好的支持!有了您的支持,我们坚信我们会做得更好! 在C ...

  2. C# SqlHelper类的使用

    SqlHelper类 1.首先SqlHelper类是一个基于.NET Framework的数据库操作组件,包含了数据库的操作方法.可以简化在C#中使用ADO.NET连接数据库时每次都要编写连接.打开. ...

  3. ACCESS数据库C#操作类(SQLHELPER修改版)——转自网上

    ACCESS数据库C#操作类(SQLHELPER修改版) 这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所 ...

  4. php实现分页mssql,PHP操作mssql数据库类,含分页类[分页类原创]

    /** * PHP操作mssql数据库类,含分页类 * Enter description here ... * @author aboc 9986584 2011-04-09 * */ class ...

  5. mfc搜索新建access字段_MFC ODBC类 Access数据库的操作

    MFC ODBC类 Access数据库的操作 2008年11月17日 新建一个Access数据库,数据库名是data.mdb新建一个表Ttest,两个字段ID,name 表内容如下 ID name 1 ...

  6. android SQLite使用SQLiteOpenHelper类对数据库进行操作

    转自:http://byandby.iteye.com/blog/835580,转载请标明出处! 一. SQLite介绍  SQLite是android内置的一个很小的关系型数据库.  SQLite的 ...

  7. 玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53750584 本文出自[DylanAndroid的博客] 玩转JDBC打造数据 ...

  8. 玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入...

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53750584  在之前学习了MySQL和Oracle之后,那么,如和在Java ...

  9. android sqlite 操作类封装,SQLiteUtils 一个简单的基于 Android 的 Sqlite 数据库的操作封装库 @codeKK Android开源站...

    一个简单的基于 Android 的 Sqlite 数据库的操作封装,它有如下的好处: 便捷地创建表和增添表字段 通过操作对象来 insert 或者 update 表记录 支持多种查询方式,支持分页查询 ...

最新文章

  1. 如何利用C#开发“通讯录”小程序
  2. 安卓gridview 网格,多行多列实现
  3. oracle 10g安装过程遇到的问题
  4. 量子遗传算法原理与MATLAB仿真程序
  5. Android开发之获取常用android设备参数信息
  6. exists的用法 python_Python 办公自动化自动整理文件,一键完成!
  7. vue 监听浏览器页面关闭_前方高能,这是最新的一波Vue实战技巧,不用则已,一用惊人...
  8. 【数据结构和算法笔记】数组(数组的储存方式和特殊矩阵的压缩储存)
  9. oracle查看数据库文件大小
  10. Timesten安装
  11. Java代码整洁之道
  12. react里面点击按钮触发复制文本功能
  13. linux中一次显示一页内容的命令
  14. 海思HI3751HiDPTAndroidV200R001 UNF 接口版本差异说明
  15. 前端开发者如何用JS开发后台
  16. ramdisk.img
  17. 新一代智慧医疗整体解决方案
  18. “Unable to create the directory [XXX] to use as the base directory”的解决办法
  19. 2021-08-17 WPF控件专题 Canvas 控件详解
  20. 如何给网站安装SSL证书?

热门文章

  1. 某聊天工具消息记录数据库文件解密逆向分析
  2. python数据分析之pandas里的Series
  3. 取出响应头中包含多个set-cookie的值
  4. APR分析-共享内存篇
  5. 神经网络(第五章补充)
  6. DOS 网络命令之 arp
  7. 算法建模流程详解及python代码实现
  8. 聊聊高并发(五)理解缓存一致性协议以及对并发编程的影响
  9. 正则表达式的一些探索(偏JavaScript)
  10. MySQL Gap Lock问题