暫無描述

DbHelperSQL.cs 56KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace CallCenterApi.DB
  11. {
  12. public abstract class DbHelperSQL
  13. {
  14. //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
  15. public static string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  16. public DbHelperSQL() { }
  17. #region 公用方法
  18. /// <summary>
  19. /// 判断是否存在某表的某个字段
  20. /// </summary>
  21. /// <param name="tableName">表名称</param>
  22. /// <param name="columnName">列名称</param>
  23. /// <returns>是否存在</returns>
  24. public static bool ColumnExists(string tableName, string columnName)
  25. {
  26. string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
  27. object res = GetSingle(sql);
  28. if (res == null)
  29. {
  30. return false;
  31. }
  32. return Convert.ToInt32(res) > 0;
  33. }
  34. public static int GetMinID(string FieldName, string TableName)
  35. {
  36. string strsql = "select min(" + FieldName + ") from " + TableName + " WHERE F_IsDelete = 0 ";
  37. object obj = DbHelperSQL.GetSingle(strsql);
  38. if (obj == null)
  39. {
  40. return 0;
  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 + " WHERE F_IsDelete = 0 ";
  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 int MaxID(string FieldName, string TableName)
  61. {
  62. string strsql = "select max(" + FieldName + ") from " + TableName + " WHERE F_IsDelete = 0 ";
  63. object obj = DbHelperSQL.GetSingle(strsql);
  64. if (obj == null)
  65. {
  66. return 1;
  67. }
  68. else
  69. {
  70. return int.Parse(obj.ToString());
  71. }
  72. }
  73. public static bool Exists(string strSql)
  74. {
  75. object obj = DbHelperSQL.GetSingle(strSql);
  76. int cmdresult;
  77. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  78. {
  79. cmdresult = 0;
  80. }
  81. else
  82. {
  83. cmdresult = int.Parse(obj.ToString());
  84. }
  85. if (cmdresult == 0)
  86. {
  87. return false;
  88. }
  89. else
  90. {
  91. return true;
  92. }
  93. }
  94. /// <summary>
  95. /// 表是否存在
  96. /// </summary>
  97. /// <param name="TableName"></param>
  98. /// <returns></returns>
  99. public static bool TabExists(string TableName)
  100. {
  101. string strsql = "select count(*) from sysobjects where id = object_id(N'[" + TableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
  102. //string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')";
  103. object obj = DbHelperSQL.GetSingle(strsql);
  104. int cmdresult;
  105. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  106. {
  107. cmdresult = 0;
  108. }
  109. else
  110. {
  111. cmdresult = int.Parse(obj.ToString());
  112. }
  113. if (cmdresult == 0)
  114. {
  115. return false;
  116. }
  117. else
  118. {
  119. return true;
  120. }
  121. }
  122. /// <summary>
  123. /// 存在返回true,不存在返回false
  124. /// </summary>
  125. /// <param name="strSql"></param>
  126. /// <param name="cmdParms"></param>
  127. /// <returns></returns>
  128. public static bool Exists(string strSql, params SqlParameter[] cmdParms)
  129. {
  130. object obj = DbHelperSQL.GetSingle(strSql, cmdParms);
  131. int cmdresult;
  132. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  133. {
  134. cmdresult = 0;
  135. }
  136. else
  137. {
  138. cmdresult = int.Parse(obj.ToString());
  139. }
  140. if (cmdresult == 0)
  141. {
  142. return false;
  143. }
  144. else
  145. {
  146. return true;
  147. }
  148. }
  149. #endregion
  150. #region 执行简单SQL语句
  151. /// <summary>
  152. /// 执行SQL语句,返回影响的记录数
  153. /// </summary>
  154. /// <param name="SQLString">SQL语句</param>
  155. /// <returns>影响的记录数</returns>
  156. public static int ExecuteSql(string SQLString)
  157. {
  158. using (SqlConnection connection = new SqlConnection(connectionString))
  159. {
  160. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  161. {
  162. try
  163. {
  164. connection.Open();
  165. int rows = cmd.ExecuteNonQuery();
  166. return rows;
  167. }
  168. catch (System.Data.SqlClient.SqlException e)
  169. {
  170. connection.Close();
  171. throw e;
  172. }
  173. }
  174. }
  175. }
  176. public static int ExecuteSql(string SQLString, Dictionary<String, String> paras)
  177. {
  178. List<SqlParameter> ps = new List<SqlParameter>();
  179. foreach (KeyValuePair<string, string> kvp in paras)
  180. {
  181. ps.Add(new SqlParameter(kvp.Key, kvp.Value));
  182. }
  183. return ExecuteSql(SQLString, ps.ToArray());
  184. }
  185. /// <summary>
  186. /// 2012-2-21新增重载,执行SQL语句,返回影响的记录数
  187. /// </summary>
  188. /// <param name="connection">SqlConnection对象</param>
  189. /// <param name="trans">SqlTransaction事件</param>
  190. /// <param name="SQLString">SQL语句</param>
  191. /// <returns>影响的记录数</returns>
  192. public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString)
  193. {
  194. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  195. {
  196. try
  197. {
  198. cmd.Connection = connection;
  199. cmd.Transaction = trans;
  200. int rows = cmd.ExecuteNonQuery();
  201. return rows;
  202. }
  203. catch (System.Data.SqlClient.SqlException e)
  204. {
  205. trans.Rollback();
  206. throw e;
  207. }
  208. }
  209. }
  210. public static int ExecuteSqlByTime(string SQLString, int Times)
  211. {
  212. using (SqlConnection connection = new SqlConnection(connectionString))
  213. {
  214. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  215. {
  216. try
  217. {
  218. connection.Open();
  219. cmd.CommandTimeout = Times;
  220. int rows = cmd.ExecuteNonQuery();
  221. return rows;
  222. }
  223. catch (System.Data.SqlClient.SqlException e)
  224. {
  225. connection.Close();
  226. throw e;
  227. }
  228. }
  229. }
  230. }
  231. /// <summary>
  232. /// 执行Sql和Oracle滴混合事务
  233. /// </summary>
  234. /// <param name="list">SQL命令行列表</param>
  235. /// <param name="oracleCmdSqlList">Oracle命令行列表</param>
  236. /// <returns>执行结果 0-由于SQL造成事务失败 -1 由于Oracle造成事务失败 1-整体事务执行成功</returns>
  237. public static int ExecuteSqlTran(List<CommandInfo> list, List<CommandInfo> oracleCmdSqlList)
  238. {
  239. using (SqlConnection conn = new SqlConnection(connectionString))
  240. {
  241. conn.Open();
  242. SqlCommand cmd = new SqlCommand();
  243. cmd.Connection = conn;
  244. SqlTransaction tx = conn.BeginTransaction();
  245. cmd.Transaction = tx;
  246. try
  247. {
  248. foreach (CommandInfo myDE in list)
  249. {
  250. string cmdText = myDE.CommandText;
  251. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  252. PrepareCommand(cmd, conn, tx, cmdText, cmdParms);
  253. if (myDE.EffentNextType == EffentNextType.SolicitationEvent)
  254. {
  255. if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
  256. {
  257. tx.Rollback();
  258. throw new Exception("违背要求" + myDE.CommandText + "必须符合select count(..的格式");
  259. //return 0;
  260. }
  261. object obj = cmd.ExecuteScalar();
  262. bool isHave = false;
  263. if (obj == null && obj == DBNull.Value)
  264. {
  265. isHave = false;
  266. }
  267. isHave = Convert.ToInt32(obj) > 0;
  268. if (isHave)
  269. {
  270. //引发事件
  271. myDE.OnSolicitationEvent();
  272. }
  273. }
  274. if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
  275. {
  276. if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
  277. {
  278. tx.Rollback();
  279. throw new Exception("SQL:违背要求" + myDE.CommandText + "必须符合select count(..的格式");
  280. //return 0;
  281. }
  282. object obj = cmd.ExecuteScalar();
  283. bool isHave = false;
  284. if (obj == null && obj == DBNull.Value)
  285. {
  286. isHave = false;
  287. }
  288. isHave = Convert.ToInt32(obj) > 0;
  289. if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
  290. {
  291. tx.Rollback();
  292. throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须大于0");
  293. //return 0;
  294. }
  295. if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
  296. {
  297. tx.Rollback();
  298. throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须等于0");
  299. //return 0;
  300. }
  301. continue;
  302. }
  303. int val = cmd.ExecuteNonQuery();
  304. if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
  305. {
  306. tx.Rollback();
  307. throw new Exception("SQL:违背要求" + myDE.CommandText + "必须有影响行");
  308. //return 0;
  309. }
  310. cmd.Parameters.Clear();
  311. }
  312. //string oraConnectionString = PubConstant.GetConnectionString("ConnectionStringPPC");
  313. //bool res = OracleHelper.ExecuteSqlTran(oraConnectionString, oracleCmdSqlList);
  314. //if (!res)
  315. //{
  316. // tx.Rollback();
  317. // throw new Exception("Oracle执行失败");
  318. // return -1;
  319. //}
  320. tx.Commit();
  321. return 1;
  322. }
  323. catch (System.Data.SqlClient.SqlException e)
  324. {
  325. tx.Rollback();
  326. throw e;
  327. }
  328. catch (Exception e)
  329. {
  330. tx.Rollback();
  331. throw e;
  332. }
  333. }
  334. }
  335. /// <summary>
  336. /// 执行多条SQL语句,实现数据库事务。
  337. /// </summary>
  338. /// <param name="SQLStringList">多条SQL语句</param>
  339. public static int ExecuteSqlTran(List<String> SQLStringList)
  340. {
  341. using (SqlConnection conn = new SqlConnection(connectionString))
  342. {
  343. conn.Open();
  344. SqlCommand cmd = new SqlCommand();
  345. cmd.Connection = conn;
  346. SqlTransaction tx = conn.BeginTransaction();
  347. cmd.Transaction = tx;
  348. try
  349. {
  350. int count = 0;
  351. for (int n = 0; n < SQLStringList.Count; n++)
  352. {
  353. string strsql = SQLStringList[n];
  354. if (strsql.Trim().Length > 1)
  355. {
  356. cmd.CommandText = strsql;
  357. count += cmd.ExecuteNonQuery();
  358. }
  359. }
  360. tx.Commit();
  361. return count;
  362. }
  363. catch
  364. {
  365. tx.Rollback();
  366. return 0;
  367. }
  368. }
  369. }
  370. /// <summary>
  371. /// 执行带一个存储过程参数的的SQL语句。
  372. /// </summary>
  373. /// <param name="SQLString">SQL语句</param>
  374. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  375. /// <returns>影响的记录数</returns>
  376. public static int ExecuteSql(string SQLString, string content)
  377. {
  378. using (SqlConnection connection = new SqlConnection(connectionString))
  379. {
  380. SqlCommand cmd = new SqlCommand(SQLString, connection);
  381. System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
  382. myParameter.Value = content;
  383. cmd.Parameters.Add(myParameter);
  384. try
  385. {
  386. connection.Open();
  387. int rows = cmd.ExecuteNonQuery();
  388. return rows;
  389. }
  390. catch (System.Data.SqlClient.SqlException e)
  391. {
  392. throw e;
  393. }
  394. finally
  395. {
  396. cmd.Dispose();
  397. connection.Close();
  398. }
  399. }
  400. }
  401. /// <summary>
  402. /// 执行带一个存储过程参数的的SQL语句。
  403. /// </summary>
  404. /// <param name="SQLString">SQL语句</param>
  405. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  406. /// <returns>影响的记录数</returns>
  407. public static object ExecuteSqlGet(string SQLString, string content)
  408. {
  409. using (SqlConnection connection = new SqlConnection(connectionString))
  410. {
  411. SqlCommand cmd = new SqlCommand(SQLString, connection);
  412. System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
  413. myParameter.Value = content;
  414. cmd.Parameters.Add(myParameter);
  415. try
  416. {
  417. connection.Open();
  418. object obj = cmd.ExecuteScalar();
  419. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  420. {
  421. return null;
  422. }
  423. else
  424. {
  425. return obj;
  426. }
  427. }
  428. catch (System.Data.SqlClient.SqlException e)
  429. {
  430. throw e;
  431. }
  432. finally
  433. {
  434. cmd.Dispose();
  435. connection.Close();
  436. }
  437. }
  438. }
  439. /// <summary>
  440. /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
  441. /// </summary>
  442. /// <param name="strSQL">SQL语句</param>
  443. /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
  444. /// <returns>影响的记录数</returns>
  445. public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
  446. {
  447. using (SqlConnection connection = new SqlConnection(connectionString))
  448. {
  449. SqlCommand cmd = new SqlCommand(strSQL, connection);
  450. System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
  451. myParameter.Value = fs;
  452. cmd.Parameters.Add(myParameter);
  453. try
  454. {
  455. connection.Open();
  456. int rows = cmd.ExecuteNonQuery();
  457. return rows;
  458. }
  459. catch (System.Data.SqlClient.SqlException e)
  460. {
  461. throw e;
  462. }
  463. finally
  464. {
  465. cmd.Dispose();
  466. connection.Close();
  467. }
  468. }
  469. }
  470. /// <summary>
  471. /// 执行一条计算查询结果语句,返回查询结果(object)。
  472. /// </summary>
  473. /// <param name="SQLString">计算查询结果语句</param>
  474. /// <returns>查询结果(object)</returns>
  475. public static object GetSingle(string SQLString)
  476. {
  477. using (SqlConnection connection = new SqlConnection(connectionString))
  478. {
  479. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  480. {
  481. try
  482. {
  483. connection.Open();
  484. object obj = cmd.ExecuteScalar();
  485. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  486. {
  487. return null;
  488. }
  489. else
  490. {
  491. return obj;
  492. }
  493. }
  494. catch (System.Data.SqlClient.SqlException e)
  495. {
  496. connection.Close();
  497. throw e;
  498. }
  499. }
  500. }
  501. }
  502. public static object GetSingle(string SQLString, Dictionary<String, String> paras)
  503. {
  504. List<SqlParameter> ps = new List<SqlParameter>();
  505. foreach (KeyValuePair<string, string> kvp in paras)
  506. {
  507. ps.Add(new SqlParameter(kvp.Key, kvp.Value));
  508. }
  509. return GetSingle(SQLString, ps.ToArray());
  510. }
  511. public static object GetSingle(string SQLString, int Times)
  512. {
  513. using (SqlConnection connection = new SqlConnection(connectionString))
  514. {
  515. using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  516. {
  517. try
  518. {
  519. connection.Open();
  520. cmd.CommandTimeout = Times;
  521. object obj = cmd.ExecuteScalar();
  522. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  523. {
  524. return null;
  525. }
  526. else
  527. {
  528. return obj;
  529. }
  530. }
  531. catch (System.Data.SqlClient.SqlException e)
  532. {
  533. connection.Close();
  534. throw e;
  535. }
  536. }
  537. }
  538. }
  539. /// <summary>
  540. /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  541. /// </summary>
  542. /// <param name="strSQL">查询语句</param>
  543. /// <returns>SqlDataReader</returns>
  544. public static SqlDataReader ExecuteReader(string strSQL)
  545. {
  546. SqlConnection connection = new SqlConnection(connectionString);
  547. SqlCommand cmd = new SqlCommand(strSQL, connection);
  548. try
  549. {
  550. connection.Open();
  551. SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  552. return myReader;
  553. }
  554. catch (System.Data.SqlClient.SqlException e)
  555. {
  556. throw e;
  557. }
  558. }
  559. /// <summary>
  560. /// 执行查询语句,返回DataSet
  561. /// </summary>
  562. /// <param name="SQLString">查询语句</param>
  563. /// <returns>DataSet</returns>
  564. public static DataSet Query(string SQLString)
  565. {
  566. using (SqlConnection connection = new SqlConnection(connectionString))
  567. {
  568. DataSet ds = new DataSet();
  569. try
  570. {
  571. connection.Open();
  572. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  573. command.Fill(ds, "ds");
  574. }
  575. catch (System.Data.SqlClient.SqlException ex)
  576. {
  577. throw new Exception(ex.Message);
  578. }
  579. return ds;
  580. }
  581. }
  582. /// <summary>
  583. /// 执行查询语句,返回DataSet(防止sql注入)
  584. /// </summary>
  585. /// <param name="SQLString"></param>
  586. /// <param name="paras"></param>
  587. /// <returns></returns>
  588. public static DataSet Query(string SQLString, Dictionary<String, String> paras)
  589. {
  590. List<SqlParameter> ps = new List<SqlParameter>();
  591. foreach (KeyValuePair<string, string> kvp in paras)
  592. {
  593. ps.Add(new SqlParameter(kvp.Key, kvp.Value));
  594. }
  595. return Query(SQLString, ps.ToArray());
  596. }
  597. public static DataSet Query(string SQLString, int Times)
  598. {
  599. using (SqlConnection connection = new SqlConnection(connectionString))
  600. {
  601. DataSet ds = new DataSet();
  602. try
  603. {
  604. connection.Open();
  605. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  606. command.SelectCommand.CommandTimeout = Times;
  607. command.Fill(ds, "ds");
  608. }
  609. catch (System.Data.SqlClient.SqlException ex)
  610. {
  611. throw new Exception(ex.Message);
  612. }
  613. return ds;
  614. }
  615. }
  616. /// <summary>
  617. /// 2012-2-21新增重载,执行查询语句,返回DataSet
  618. /// </summary>
  619. /// <param name="connection">SqlConnection对象</param>
  620. /// <param name="trans">SqlTransaction事务</param>
  621. /// <param name="SQLString">SQL语句</param>
  622. /// <returns>DataSet</returns>
  623. public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString)
  624. {
  625. DataSet ds = new DataSet();
  626. try
  627. {
  628. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  629. command.SelectCommand.Transaction = trans;
  630. command.Fill(ds, "ds");
  631. }
  632. catch (System.Data.SqlClient.SqlException ex)
  633. {
  634. throw new Exception(ex.Message);
  635. }
  636. return ds;
  637. }
  638. #endregion
  639. #region 执行带参数的SQL语句
  640. /// <summary>
  641. /// 执行SQL语句,返回影响的记录数
  642. /// </summary>
  643. /// <param name="SQLString">SQL语句</param>
  644. /// <returns>影响的记录数</returns>
  645. public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
  646. {
  647. using (SqlConnection connection = new SqlConnection(connectionString))
  648. {
  649. using (SqlCommand cmd = new SqlCommand())
  650. {
  651. try
  652. {
  653. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  654. int rows = cmd.ExecuteNonQuery();
  655. cmd.Parameters.Clear();
  656. return rows;
  657. }
  658. catch (System.Data.SqlClient.SqlException e)
  659. {
  660. throw e;
  661. }
  662. }
  663. }
  664. }
  665. /// <summary>
  666. /// 2012-2-29新增重载,执行SQL语句,返回影响的记录数
  667. /// </summary>
  668. /// <param name="connection">SqlConnection对象</param>
  669. /// <param name="trans">SqlTransaction对象</param>
  670. /// <param name="SQLString">SQL语句</param>
  671. /// <returns>影响的记录数</returns>
  672. public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  673. {
  674. using (SqlCommand cmd = new SqlCommand())
  675. {
  676. try
  677. {
  678. PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  679. int rows = cmd.ExecuteNonQuery();
  680. cmd.Parameters.Clear();
  681. return rows;
  682. }
  683. catch (System.Data.SqlClient.SqlException e)
  684. {
  685. trans.Rollback();
  686. throw e;
  687. }
  688. }
  689. }
  690. /// <summary>
  691. /// 执行多条SQL语句,实现数据库事务。
  692. /// </summary>
  693. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  694. public static int ExecuteSqlTran(Hashtable SQLStringList)
  695. {
  696. using (SqlConnection conn = new SqlConnection(connectionString))
  697. {
  698. conn.Open();
  699. using (SqlTransaction trans = conn.BeginTransaction())
  700. {
  701. SqlCommand cmd = new SqlCommand();
  702. try
  703. {
  704. //循环
  705. int count = 0;
  706. foreach (DictionaryEntry myDE in SQLStringList)
  707. {
  708. string cmdText = myDE.Key.ToString();
  709. SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  710. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  711. int val = cmd.ExecuteNonQuery();
  712. cmd.Parameters.Clear();
  713. count += val;
  714. }
  715. trans.Commit();
  716. return count;
  717. }
  718. catch
  719. {
  720. trans.Rollback();
  721. return 0;
  722. }
  723. }
  724. }
  725. }
  726. /// <summary>
  727. /// 执行多条SQL语句,实现数据库事务。
  728. /// </summary>
  729. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  730. public static int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList)
  731. {
  732. using (SqlConnection conn = new SqlConnection(connectionString))
  733. {
  734. conn.Open();
  735. using (SqlTransaction trans = conn.BeginTransaction())
  736. {
  737. SqlCommand cmd = new SqlCommand();
  738. try
  739. {
  740. int count = 0;
  741. //循环
  742. foreach (CommandInfo myDE in cmdList)
  743. {
  744. string cmdText = myDE.CommandText;
  745. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  746. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  747. if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
  748. {
  749. if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
  750. {
  751. trans.Rollback();
  752. return 0;
  753. }
  754. object obj = cmd.ExecuteScalar();
  755. bool isHave = false;
  756. if (obj == null && obj == DBNull.Value)
  757. {
  758. isHave = false;
  759. }
  760. isHave = Convert.ToInt32(obj) > 0;
  761. if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
  762. {
  763. trans.Rollback();
  764. return 0;
  765. }
  766. if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
  767. {
  768. trans.Rollback();
  769. return 0;
  770. }
  771. continue;
  772. }
  773. int val = cmd.ExecuteNonQuery();
  774. count += val;
  775. if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
  776. {
  777. trans.Rollback();
  778. return 0;
  779. }
  780. cmd.Parameters.Clear();
  781. }
  782. trans.Commit();
  783. return count;
  784. }
  785. catch
  786. {
  787. trans.Rollback();
  788. throw;
  789. }
  790. }
  791. }
  792. }
  793. /// <summary>
  794. /// 执行多条SQL语句,实现数据库事务。
  795. /// </summary>
  796. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  797. public static int ExecuteSqlTranWithIndentity(System.Collections.Generic.List<CommandInfo> SQLStringList)
  798. {
  799. using (SqlConnection conn = new SqlConnection(connectionString))
  800. {
  801. conn.Open();
  802. using (SqlTransaction trans = conn.BeginTransaction())
  803. {
  804. SqlCommand cmd = new SqlCommand();
  805. try
  806. {
  807. int indentity = 0;
  808. int count = 0;
  809. //循环
  810. foreach (CommandInfo myDE in SQLStringList)
  811. {
  812. string cmdText = myDE.CommandText;
  813. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  814. foreach (SqlParameter q in cmdParms)
  815. {
  816. if (q.Direction == ParameterDirection.InputOutput)
  817. {
  818. q.Value = indentity;
  819. }
  820. }
  821. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  822. int val = cmd.ExecuteNonQuery();
  823. foreach (SqlParameter q in cmdParms)
  824. {
  825. if (q.Direction == ParameterDirection.Output)
  826. {
  827. indentity = Convert.ToInt32(q.Value);
  828. }
  829. }
  830. count += val;
  831. cmd.Parameters.Clear();
  832. }
  833. trans.Commit();
  834. return count;
  835. }
  836. catch
  837. {
  838. trans.Rollback();
  839. return 0;
  840. }
  841. }
  842. }
  843. }
  844. /// <summary>
  845. /// 执行多条SQL语句,实现数据库事务。
  846. /// </summary>
  847. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  848. public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
  849. {
  850. using (SqlConnection conn = new SqlConnection(connectionString))
  851. {
  852. conn.Open();
  853. using (SqlTransaction trans = conn.BeginTransaction())
  854. {
  855. SqlCommand cmd = new SqlCommand();
  856. try
  857. {
  858. int indentity = 0;
  859. //循环
  860. foreach (DictionaryEntry myDE in SQLStringList)
  861. {
  862. string cmdText = myDE.Key.ToString();
  863. SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  864. foreach (SqlParameter q in cmdParms)
  865. {
  866. if (q.Direction == ParameterDirection.InputOutput)
  867. {
  868. q.Value = indentity;
  869. }
  870. }
  871. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  872. int val = cmd.ExecuteNonQuery();
  873. foreach (SqlParameter q in cmdParms)
  874. {
  875. if (q.Direction == ParameterDirection.Output)
  876. {
  877. indentity = Convert.ToInt32(q.Value);
  878. }
  879. }
  880. cmd.Parameters.Clear();
  881. }
  882. trans.Commit();
  883. }
  884. catch
  885. {
  886. trans.Rollback();
  887. throw;
  888. }
  889. }
  890. }
  891. }
  892. /// <summary>
  893. /// 执行一条计算查询结果语句,返回查询结果(object)。
  894. /// </summary>
  895. /// <param name="SQLString">计算查询结果语句</param>
  896. /// <returns>查询结果(object)</returns>
  897. public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
  898. {
  899. using (SqlConnection connection = new SqlConnection(connectionString))
  900. {
  901. using (SqlCommand cmd = new SqlCommand())
  902. {
  903. try
  904. {
  905. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  906. object obj = cmd.ExecuteScalar();
  907. cmd.Parameters.Clear();
  908. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  909. {
  910. return null;
  911. }
  912. else
  913. {
  914. return obj;
  915. }
  916. }
  917. catch (System.Data.SqlClient.SqlException e)
  918. {
  919. throw e;
  920. }
  921. }
  922. }
  923. }
  924. /// <summary>
  925. /// 2012-2-21新增重载,执行一条计算查询结果语句,返回查询结果(object)。
  926. /// </summary>
  927. /// <param name="connection">SqlConnection对象</param>
  928. /// <param name="trans">SqlTransaction事务</param>
  929. /// <param name="SQLString">计算查询结果语句</param>
  930. /// <returns>查询结果(object)</returns>
  931. public static object GetSingle(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  932. {
  933. using (SqlCommand cmd = new SqlCommand())
  934. {
  935. try
  936. {
  937. PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  938. object obj = cmd.ExecuteScalar();
  939. cmd.Parameters.Clear();
  940. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  941. {
  942. return null;
  943. }
  944. else
  945. {
  946. return obj;
  947. }
  948. }
  949. catch (System.Data.SqlClient.SqlException e)
  950. {
  951. trans.Rollback();
  952. throw e;
  953. }
  954. }
  955. }
  956. /// <summary>
  957. /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  958. /// </summary>
  959. /// <param name="strSQL">查询语句</param>
  960. /// <returns>SqlDataReader</returns>
  961. public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
  962. {
  963. SqlConnection connection = new SqlConnection(connectionString);
  964. SqlCommand cmd = new SqlCommand();
  965. try
  966. {
  967. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  968. SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  969. cmd.Parameters.Clear();
  970. return myReader;
  971. }
  972. catch (System.Data.SqlClient.SqlException e)
  973. {
  974. throw e;
  975. }
  976. // finally
  977. // {
  978. // cmd.Dispose();
  979. // connection.Close();
  980. // }
  981. }
  982. /// <summary>
  983. /// 执行查询语句,返回DataSet
  984. /// </summary>
  985. /// <param name="SQLString">查询语句</param>
  986. /// <returns>DataSet</returns>
  987. public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
  988. {
  989. using (SqlConnection connection = new SqlConnection(connectionString))
  990. {
  991. SqlCommand cmd = new SqlCommand();
  992. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  993. using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  994. {
  995. DataSet ds = new DataSet();
  996. try
  997. {
  998. da.Fill(ds, "ds");
  999. cmd.Parameters.Clear();
  1000. }
  1001. catch (System.Data.SqlClient.SqlException ex)
  1002. {
  1003. throw new Exception(ex.Message);
  1004. }
  1005. return ds;
  1006. }
  1007. }
  1008. }
  1009. /// <summary>
  1010. /// 2012-2-21新增重载,执行查询语句,返回DataSet
  1011. /// </summary>
  1012. /// <param name="connection">SqlConnection对象</param>
  1013. /// <param name="trans">SqlTransaction事务</param>
  1014. /// <param name="SQLString">查询语句</param>
  1015. /// <returns>DataSet</returns>
  1016. public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  1017. {
  1018. SqlCommand cmd = new SqlCommand();
  1019. PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  1020. using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  1021. {
  1022. DataSet ds = new DataSet();
  1023. try
  1024. {
  1025. da.Fill(ds, "ds");
  1026. cmd.Parameters.Clear();
  1027. }
  1028. catch (System.Data.SqlClient.SqlException ex)
  1029. {
  1030. trans.Rollback();
  1031. throw new Exception(ex.Message);
  1032. }
  1033. return ds;
  1034. }
  1035. }
  1036. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
  1037. {
  1038. if (conn.State != ConnectionState.Open)
  1039. conn.Open();
  1040. cmd.Connection = conn;
  1041. cmd.CommandText = cmdText;
  1042. if (trans != null)
  1043. cmd.Transaction = trans;
  1044. cmd.CommandType = CommandType.Text;//cmdType;
  1045. if (cmdParms != null)
  1046. {
  1047. foreach (SqlParameter parameter in cmdParms)
  1048. {
  1049. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  1050. (parameter.Value == null))
  1051. {
  1052. parameter.Value = DBNull.Value;
  1053. }
  1054. cmd.Parameters.Add(parameter);
  1055. }
  1056. }
  1057. }
  1058. #endregion
  1059. #region 存储过程操作
  1060. /// <summary>
  1061. /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  1062. /// </summary>
  1063. /// <param name="storedProcName">存储过程名</param>
  1064. /// <param name="parameters">存储过程参数</param>
  1065. /// <returns>SqlDataReader</returns>
  1066. public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
  1067. {
  1068. SqlConnection connection = new SqlConnection(connectionString);
  1069. SqlDataReader returnReader;
  1070. connection.Open();
  1071. SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  1072. command.CommandType = CommandType.StoredProcedure;
  1073. returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
  1074. return returnReader;
  1075. }
  1076. /// <summary>
  1077. /// 执行存储过程
  1078. /// </summary>
  1079. /// <param name="storedProcName">存储过程名</param>
  1080. /// <param name="parameters">存储过程参数</param>
  1081. /// <param name="tableName">DataSet结果中的表名</param>
  1082. /// <returns>DataSet</returns>
  1083. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
  1084. {
  1085. using (SqlConnection connection = new SqlConnection(connectionString))
  1086. {
  1087. DataSet dataSet = new DataSet();
  1088. connection.Open();
  1089. SqlDataAdapter sqlDA = new SqlDataAdapter();
  1090. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  1091. sqlDA.Fill(dataSet, tableName);
  1092. connection.Close();
  1093. return dataSet;
  1094. }
  1095. }
  1096. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)
  1097. {
  1098. using (SqlConnection connection = new SqlConnection(connectionString))
  1099. {
  1100. DataSet dataSet = new DataSet();
  1101. connection.Open();
  1102. SqlDataAdapter sqlDA = new SqlDataAdapter();
  1103. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  1104. sqlDA.SelectCommand.CommandTimeout = Times;
  1105. sqlDA.Fill(dataSet, tableName);
  1106. connection.Close();
  1107. return dataSet;
  1108. }
  1109. }
  1110. public static DataSet RunProcedure(string storedProcName, Dictionary<String, String> paras, string tableName)
  1111. {
  1112. List<SqlParameter> ps = new List<SqlParameter>();
  1113. foreach (KeyValuePair<string, string> kvp in paras)
  1114. {
  1115. ps.Add(new SqlParameter(kvp.Key, kvp.Value));
  1116. }
  1117. using (SqlConnection connection = new SqlConnection(connectionString))
  1118. {
  1119. DataSet dataSet = new DataSet();
  1120. connection.Open();
  1121. SqlDataAdapter sqlDA = new SqlDataAdapter();
  1122. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, ps.ToArray());
  1123. sqlDA.Fill(dataSet, tableName);
  1124. connection.Close();
  1125. return dataSet;
  1126. }
  1127. }
  1128. /// <summary>
  1129. /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
  1130. /// </summary>
  1131. /// <param name="connection">数据库连接</param>
  1132. /// <param name="storedProcName">存储过程名</param>
  1133. /// <param name="parameters">存储过程参数</param>
  1134. /// <returns>SqlCommand</returns>
  1135. private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  1136. {
  1137. SqlCommand command = new SqlCommand(storedProcName, connection);
  1138. command.CommandType = CommandType.StoredProcedure;
  1139. foreach (SqlParameter parameter in parameters)
  1140. {
  1141. if (parameter != null)
  1142. {
  1143. // 检查未分配值的输出参数,将其分配以DBNull.Value.
  1144. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  1145. (parameter.Value == null))
  1146. {
  1147. parameter.Value = DBNull.Value;
  1148. }
  1149. command.Parameters.Add(parameter);
  1150. }
  1151. }
  1152. command.CommandTimeout = 180;
  1153. return command;
  1154. }
  1155. /// <summary>
  1156. /// 执行存储过程,返回影响的行数
  1157. /// </summary>
  1158. /// <param name="storedProcName">存储过程名</param>
  1159. /// <param name="parameters">存储过程参数</param>
  1160. /// <param name="rowsAffected">影响的行数</param>
  1161. /// <returns></returns>
  1162. public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
  1163. {
  1164. using (SqlConnection connection = new SqlConnection(connectionString))
  1165. {
  1166. int result;
  1167. connection.Open();
  1168. SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
  1169. rowsAffected = command.ExecuteNonQuery();
  1170. result = (int)command.Parameters["ReturnValue"].Value;
  1171. //Connection.Close();
  1172. return result;
  1173. }
  1174. }
  1175. /// <summary>
  1176. /// 创建 SqlCommand 对象实例(用来返回一个整数值)
  1177. /// </summary>
  1178. /// <param name="storedProcName">存储过程名</param>
  1179. /// <param name="parameters">存储过程参数</param>
  1180. /// <returns>SqlCommand 对象实例</returns>
  1181. private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  1182. {
  1183. SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  1184. command.Parameters.Add(new SqlParameter("ReturnValue",
  1185. SqlDbType.Int, 4, ParameterDirection.ReturnValue,
  1186. false, 0, 0, string.Empty, DataRowVersion.Default, null));
  1187. return command;
  1188. }
  1189. #endregion
  1190. /// <summary>
  1191. /// 执行多条SQL语句,实现数据库事务。
  1192. /// </summary>
  1193. /// <param name="SQLStringList">多条SQL语句</param>
  1194. public static int ExecuteSqlTran(List<String> SQLStringList, SqlConnection con)
  1195. {
  1196. if (con.State == ConnectionState.Closed)
  1197. {
  1198. con.Open();
  1199. }
  1200. SqlCommand cmd = new SqlCommand();
  1201. cmd.Connection = con;
  1202. SqlTransaction tx = con.BeginTransaction();
  1203. cmd.Transaction = tx;
  1204. try
  1205. {
  1206. int count = 0;
  1207. for (int n = 0; n < SQLStringList.Count; n++)
  1208. {
  1209. string strsql = SQLStringList[n];
  1210. if (strsql.Trim().Length > 1)
  1211. {
  1212. cmd.CommandText = strsql;
  1213. count += cmd.ExecuteNonQuery();
  1214. }
  1215. }
  1216. tx.Commit();
  1217. return count;
  1218. }
  1219. catch
  1220. {
  1221. tx.Rollback();
  1222. return 0;
  1223. }
  1224. }
  1225. /// <summary>
  1226. /// 执行多条SQL语句,实现数据库事务。
  1227. /// </summary>
  1228. /// <param name="SQLStringList">多条SQL语句</param>
  1229. public static int ExecuteSqlTransaction(List<String> SQLStringList)
  1230. {
  1231. using (SqlConnection con = new SqlConnection(connectionString))
  1232. {
  1233. if (con.State == ConnectionState.Closed)
  1234. {
  1235. con.Open();
  1236. }
  1237. using (SqlCommand cmd = new SqlCommand())
  1238. {
  1239. cmd.Connection = con;
  1240. SqlTransaction tx = con.BeginTransaction();
  1241. cmd.Transaction = tx;
  1242. try
  1243. {
  1244. int count = 0;
  1245. for (int n = 0; n < SQLStringList.Count; n++)
  1246. {
  1247. string strsql = SQLStringList[n];
  1248. if (strsql.Trim().Length > 1)
  1249. {
  1250. cmd.CommandText = strsql;
  1251. count += cmd.ExecuteNonQuery();
  1252. }
  1253. }
  1254. tx.Commit();
  1255. return count;
  1256. }
  1257. catch
  1258. {
  1259. tx.Rollback();
  1260. return 0;
  1261. }
  1262. }
  1263. }
  1264. }
  1265. #region 执行分页存储过程
  1266. /// <summary>
  1267. /// 执行存储过程Pagination分页
  1268. /// </summary>
  1269. /// <param name="TableName">表名或视图名或一个select语句</param>
  1270. /// <param name="PK">主键名</param>
  1271. /// <param name="Fields">返回的字段</param>
  1272. /// <param name="WhereStr">Where条件(and id=1 and name=222)</param>
  1273. /// <param name="OrderStr">排序(order by Id desc,time desc)</param>
  1274. /// <param name="PageSize">每页记录数</param>
  1275. /// <param name="PageIndex">页码</param>
  1276. /// <param name="IsCount">是否返回总记录数</param>
  1277. /// <param name="RecordCount">输出总记录数(不需返回时为0)</param>
  1278. /// <returns></returns>
  1279. public static DataTable RunPagination(string TableName, string PK, string Fields, string WhereStr, string OrderStr, int PageSize, int PageIndex, bool IsCount, out int RecordCount)
  1280. {
  1281. SqlParameter[] Paras =
  1282. {
  1283. new SqlParameter("@SqlTable",SqlDbType.VarChar,1000),
  1284. new SqlParameter("@SqlPK",SqlDbType.VarChar,50),
  1285. new SqlParameter("@SqlField",SqlDbType.VarChar,1000),
  1286. new SqlParameter("@SqlWhere",SqlDbType.VarChar,1000),
  1287. new SqlParameter("@SqlOrder",SqlDbType.VarChar,200),
  1288. new SqlParameter("@PageSize",SqlDbType.Int),
  1289. new SqlParameter("@PageIndex",SqlDbType.Int),
  1290. new SqlParameter("@IsCount",SqlDbType.Bit),
  1291. new SqlParameter("@RecordCount",SqlDbType.Int)
  1292. };
  1293. Paras[0].Value = TableName;
  1294. Paras[1].Value = PK;
  1295. Paras[2].Value = Fields;
  1296. Paras[3].Value = WhereStr;
  1297. Paras[4].Value = OrderStr;
  1298. Paras[5].Value = PageSize;
  1299. Paras[6].Value = PageIndex;
  1300. Paras[7].Value = Convert.ToInt32(IsCount);
  1301. Paras[8].Direction = ParameterDirection.Output;
  1302. DataSet PageSet = RunProcedure("[Pagination]", Paras, "Pager");
  1303. RecordCount = IsCount ? Convert.ToInt32(Paras[8].Value) : 0;
  1304. return PageSet.Tables["Pager"];
  1305. }
  1306. public static DataTable ExecuteDataTable(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  1307. {
  1308. //create a command and prepare it for execution
  1309. SqlCommand cmd = new SqlCommand();
  1310. PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);
  1311. //create the DataAdapter & DataTable
  1312. SqlDataAdapter da = new SqlDataAdapter(cmd);
  1313. DataTable dt = new DataTable();
  1314. //fill the DataTable using default values for DataTable names, etc.
  1315. da.Fill(dt);
  1316. // detach the SqlParameters from the command object, so they can be used again.
  1317. cmd.Parameters.Clear();
  1318. connection.Close();
  1319. connection.Dispose();
  1320. //return the DataTable
  1321. return dt;
  1322. }
  1323. /// <summary>
  1324. /// Prepare a command for execution
  1325. /// </summary>
  1326. /// <param name="cmd">SqlCommand object</param>
  1327. /// <param name="conn">SqlConnection object</param>
  1328. /// <param name="trans">SqlTransaction object</param>
  1329. /// <param name="cmdType">Cmd type e.g. stored procedure or text</param>
  1330. /// <param name="cmdText">Command text, e.g. Select * from Products</param>
  1331. /// <param name="cmdParms">SqlParameters to use in the command</param>
  1332. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
  1333. {
  1334. if (conn.State != ConnectionState.Open)
  1335. conn.Open();
  1336. cmd.Connection = conn;
  1337. cmd.CommandText = cmdText;
  1338. cmd.CommandTimeout = 300;
  1339. if (trans != null)
  1340. cmd.Transaction = trans;
  1341. cmd.CommandType = cmdType;
  1342. if (cmdParms != null)
  1343. {
  1344. foreach (SqlParameter parm in cmdParms)
  1345. {
  1346. if (parm.Value == null)
  1347. {
  1348. parm.Value = DBNull.Value;
  1349. }
  1350. cmd.Parameters.Add(parm);
  1351. }
  1352. }
  1353. }
  1354. #endregion
  1355. #region 大量数据导入
  1356. public static void SqlBulkCopyByDatatable(string TableName, DataTable dt)
  1357. {
  1358. using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))
  1359. {
  1360. try
  1361. {
  1362. sqlbulkcopy.DestinationTableName = TableName;
  1363. for (int i = 0; i < dt.Columns.Count; i++)
  1364. {
  1365. sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
  1366. }
  1367. sqlbulkcopy.WriteToServer(dt);
  1368. }
  1369. catch (System.Exception ex)
  1370. {
  1371. throw ex;
  1372. }
  1373. }
  1374. }
  1375. #endregion
  1376. }
  1377. }