新野县12345_后端

DbHelperSQL.cs 56KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464
  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. public static DataSet Query(string SQLString,string connect)
  560. {
  561. using (SqlConnection connection = new SqlConnection(connect))
  562. {
  563. DataSet ds = new DataSet();
  564. try
  565. {
  566. connection.Open();
  567. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  568. command.Fill(ds, "ds");
  569. }
  570. catch (System.Data.SqlClient.SqlException ex)
  571. {
  572. throw new Exception(ex.Message);
  573. }
  574. return ds;
  575. }
  576. }
  577. /// <summary>
  578. /// 执行查询语句,返回DataSet
  579. /// </summary>
  580. /// <param name="SQLString">查询语句</param>
  581. /// <returns>DataSet</returns>
  582. public static DataSet Query(string SQLString)
  583. {
  584. using (SqlConnection connection = new SqlConnection(connectionString))
  585. {
  586. DataSet ds = new DataSet();
  587. try
  588. {
  589. connection.Open();
  590. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  591. command.Fill(ds, "ds");
  592. }
  593. catch (System.Data.SqlClient.SqlException ex)
  594. {
  595. throw new Exception(ex.Message);
  596. }
  597. return ds;
  598. }
  599. }
  600. /// <summary>
  601. /// 执行查询语句,返回DataSet(防止sql注入)
  602. /// </summary>
  603. /// <param name="SQLString"></param>
  604. /// <param name="paras"></param>
  605. /// <returns></returns>
  606. public static DataSet Query(string SQLString, Dictionary<String, String> paras)
  607. {
  608. List<SqlParameter> ps = new List<SqlParameter>();
  609. foreach (KeyValuePair<string, string> kvp in paras)
  610. {
  611. ps.Add(new SqlParameter(kvp.Key, kvp.Value));
  612. }
  613. return Query(SQLString, ps.ToArray());
  614. }
  615. public static DataSet Query(string SQLString, int Times)
  616. {
  617. using (SqlConnection connection = new SqlConnection(connectionString))
  618. {
  619. DataSet ds = new DataSet();
  620. try
  621. {
  622. connection.Open();
  623. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  624. command.SelectCommand.CommandTimeout = Times;
  625. command.Fill(ds, "ds");
  626. }
  627. catch (System.Data.SqlClient.SqlException ex)
  628. {
  629. throw new Exception(ex.Message);
  630. }
  631. return ds;
  632. }
  633. }
  634. /// <summary>
  635. /// 2012-2-21新增重载,执行查询语句,返回DataSet
  636. /// </summary>
  637. /// <param name="connection">SqlConnection对象</param>
  638. /// <param name="trans">SqlTransaction事务</param>
  639. /// <param name="SQLString">SQL语句</param>
  640. /// <returns>DataSet</returns>
  641. public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString)
  642. {
  643. DataSet ds = new DataSet();
  644. try
  645. {
  646. SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  647. command.SelectCommand.Transaction = trans;
  648. command.Fill(ds, "ds");
  649. }
  650. catch (System.Data.SqlClient.SqlException ex)
  651. {
  652. throw new Exception(ex.Message);
  653. }
  654. return ds;
  655. }
  656. #endregion
  657. #region 执行带参数的SQL语句
  658. /// <summary>
  659. /// 执行SQL语句,返回影响的记录数
  660. /// </summary>
  661. /// <param name="SQLString">SQL语句</param>
  662. /// <returns>影响的记录数</returns>
  663. public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
  664. {
  665. using (SqlConnection connection = new SqlConnection(connectionString))
  666. {
  667. using (SqlCommand cmd = new SqlCommand())
  668. {
  669. try
  670. {
  671. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  672. int rows = cmd.ExecuteNonQuery();
  673. cmd.Parameters.Clear();
  674. return rows;
  675. }
  676. catch (System.Data.SqlClient.SqlException e)
  677. {
  678. throw e;
  679. }
  680. }
  681. }
  682. }
  683. /// <summary>
  684. /// 2012-2-29新增重载,执行SQL语句,返回影响的记录数
  685. /// </summary>
  686. /// <param name="connection">SqlConnection对象</param>
  687. /// <param name="trans">SqlTransaction对象</param>
  688. /// <param name="SQLString">SQL语句</param>
  689. /// <returns>影响的记录数</returns>
  690. public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  691. {
  692. using (SqlCommand cmd = new SqlCommand())
  693. {
  694. try
  695. {
  696. PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  697. int rows = cmd.ExecuteNonQuery();
  698. cmd.Parameters.Clear();
  699. return rows;
  700. }
  701. catch (System.Data.SqlClient.SqlException e)
  702. {
  703. trans.Rollback();
  704. throw e;
  705. }
  706. }
  707. }
  708. /// <summary>
  709. /// 执行多条SQL语句,实现数据库事务。
  710. /// </summary>
  711. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  712. public static int ExecuteSqlTran(Hashtable SQLStringList)
  713. {
  714. using (SqlConnection conn = new SqlConnection(connectionString))
  715. {
  716. conn.Open();
  717. using (SqlTransaction trans = conn.BeginTransaction())
  718. {
  719. SqlCommand cmd = new SqlCommand();
  720. try
  721. {
  722. //循环
  723. int count = 0;
  724. foreach (DictionaryEntry myDE in SQLStringList)
  725. {
  726. string cmdText = myDE.Key.ToString();
  727. SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  728. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  729. int val = cmd.ExecuteNonQuery();
  730. cmd.Parameters.Clear();
  731. count += val;
  732. }
  733. trans.Commit();
  734. return count;
  735. }
  736. catch
  737. {
  738. trans.Rollback();
  739. return 0;
  740. }
  741. }
  742. }
  743. }
  744. /// <summary>
  745. /// 执行多条SQL语句,实现数据库事务。
  746. /// </summary>
  747. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  748. public static int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList)
  749. {
  750. using (SqlConnection conn = new SqlConnection(connectionString))
  751. {
  752. conn.Open();
  753. using (SqlTransaction trans = conn.BeginTransaction())
  754. {
  755. SqlCommand cmd = new SqlCommand();
  756. try
  757. {
  758. int count = 0;
  759. //循环
  760. foreach (CommandInfo myDE in cmdList)
  761. {
  762. string cmdText = myDE.CommandText;
  763. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  764. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  765. if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
  766. {
  767. if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
  768. {
  769. trans.Rollback();
  770. return 0;
  771. }
  772. object obj = cmd.ExecuteScalar();
  773. bool isHave = false;
  774. if (obj == null && obj == DBNull.Value)
  775. {
  776. isHave = false;
  777. }
  778. isHave = Convert.ToInt32(obj) > 0;
  779. if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
  780. {
  781. trans.Rollback();
  782. return 0;
  783. }
  784. if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
  785. {
  786. trans.Rollback();
  787. return 0;
  788. }
  789. continue;
  790. }
  791. int val = cmd.ExecuteNonQuery();
  792. count += val;
  793. if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
  794. {
  795. trans.Rollback();
  796. return 0;
  797. }
  798. cmd.Parameters.Clear();
  799. }
  800. trans.Commit();
  801. return count;
  802. }
  803. catch
  804. {
  805. trans.Rollback();
  806. throw;
  807. }
  808. }
  809. }
  810. }
  811. /// <summary>
  812. /// 执行多条SQL语句,实现数据库事务。
  813. /// </summary>
  814. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  815. public static int ExecuteSqlTranWithIndentity(System.Collections.Generic.List<CommandInfo> SQLStringList)
  816. {
  817. using (SqlConnection conn = new SqlConnection(connectionString))
  818. {
  819. conn.Open();
  820. using (SqlTransaction trans = conn.BeginTransaction())
  821. {
  822. SqlCommand cmd = new SqlCommand();
  823. try
  824. {
  825. int indentity = 0;
  826. int count = 0;
  827. //循环
  828. foreach (CommandInfo myDE in SQLStringList)
  829. {
  830. string cmdText = myDE.CommandText;
  831. SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;
  832. foreach (SqlParameter q in cmdParms)
  833. {
  834. if (q.Direction == ParameterDirection.InputOutput)
  835. {
  836. q.Value = indentity;
  837. }
  838. }
  839. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  840. int val = cmd.ExecuteNonQuery();
  841. foreach (SqlParameter q in cmdParms)
  842. {
  843. if (q.Direction == ParameterDirection.Output)
  844. {
  845. indentity = Convert.ToInt32(q.Value);
  846. }
  847. }
  848. count += val;
  849. cmd.Parameters.Clear();
  850. }
  851. trans.Commit();
  852. return count;
  853. }
  854. catch
  855. {
  856. trans.Rollback();
  857. return 0;
  858. }
  859. }
  860. }
  861. }
  862. /// <summary>
  863. /// 执行多条SQL语句,实现数据库事务。
  864. /// </summary>
  865. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  866. public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
  867. {
  868. using (SqlConnection conn = new SqlConnection(connectionString))
  869. {
  870. conn.Open();
  871. using (SqlTransaction trans = conn.BeginTransaction())
  872. {
  873. SqlCommand cmd = new SqlCommand();
  874. try
  875. {
  876. int indentity = 0;
  877. //循环
  878. foreach (DictionaryEntry myDE in SQLStringList)
  879. {
  880. string cmdText = myDE.Key.ToString();
  881. SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  882. foreach (SqlParameter q in cmdParms)
  883. {
  884. if (q.Direction == ParameterDirection.InputOutput)
  885. {
  886. q.Value = indentity;
  887. }
  888. }
  889. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  890. int val = cmd.ExecuteNonQuery();
  891. foreach (SqlParameter q in cmdParms)
  892. {
  893. if (q.Direction == ParameterDirection.Output)
  894. {
  895. indentity = Convert.ToInt32(q.Value);
  896. }
  897. }
  898. cmd.Parameters.Clear();
  899. }
  900. trans.Commit();
  901. }
  902. catch
  903. {
  904. trans.Rollback();
  905. throw;
  906. }
  907. }
  908. }
  909. }
  910. /// <summary>
  911. /// 执行一条计算查询结果语句,返回查询结果(object)。
  912. /// </summary>
  913. /// <param name="SQLString">计算查询结果语句</param>
  914. /// <returns>查询结果(object)</returns>
  915. public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
  916. {
  917. using (SqlConnection connection = new SqlConnection(connectionString))
  918. {
  919. using (SqlCommand cmd = new SqlCommand())
  920. {
  921. try
  922. {
  923. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  924. object obj = cmd.ExecuteScalar();
  925. cmd.Parameters.Clear();
  926. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  927. {
  928. return null;
  929. }
  930. else
  931. {
  932. return obj;
  933. }
  934. }
  935. catch (System.Data.SqlClient.SqlException e)
  936. {
  937. throw e;
  938. }
  939. }
  940. }
  941. }
  942. /// <summary>
  943. /// 2012-2-21新增重载,执行一条计算查询结果语句,返回查询结果(object)。
  944. /// </summary>
  945. /// <param name="connection">SqlConnection对象</param>
  946. /// <param name="trans">SqlTransaction事务</param>
  947. /// <param name="SQLString">计算查询结果语句</param>
  948. /// <returns>查询结果(object)</returns>
  949. public static object GetSingle(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  950. {
  951. using (SqlCommand cmd = new SqlCommand())
  952. {
  953. try
  954. {
  955. PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  956. object obj = cmd.ExecuteScalar();
  957. cmd.Parameters.Clear();
  958. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  959. {
  960. return null;
  961. }
  962. else
  963. {
  964. return obj;
  965. }
  966. }
  967. catch (System.Data.SqlClient.SqlException e)
  968. {
  969. trans.Rollback();
  970. throw e;
  971. }
  972. }
  973. }
  974. /// <summary>
  975. /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  976. /// </summary>
  977. /// <param name="strSQL">查询语句</param>
  978. /// <returns>SqlDataReader</returns>
  979. public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
  980. {
  981. SqlConnection connection = new SqlConnection(connectionString);
  982. SqlCommand cmd = new SqlCommand();
  983. try
  984. {
  985. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  986. SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  987. cmd.Parameters.Clear();
  988. return myReader;
  989. }
  990. catch (System.Data.SqlClient.SqlException e)
  991. {
  992. throw e;
  993. }
  994. // finally
  995. // {
  996. // cmd.Dispose();
  997. // connection.Close();
  998. // }
  999. }
  1000. /// <summary>
  1001. /// 执行查询语句,返回DataSet
  1002. /// </summary>
  1003. /// <param name="SQLString">查询语句</param>
  1004. /// <returns>DataSet</returns>
  1005. public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
  1006. {
  1007. using (SqlConnection connection = new SqlConnection(connectionString))
  1008. {
  1009. SqlCommand cmd = new SqlCommand();
  1010. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  1011. using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  1012. {
  1013. DataSet ds = new DataSet();
  1014. try
  1015. {
  1016. da.Fill(ds, "ds");
  1017. cmd.Parameters.Clear();
  1018. }
  1019. catch (System.Data.SqlClient.SqlException ex)
  1020. {
  1021. throw new Exception(ex.Message);
  1022. }
  1023. return ds;
  1024. }
  1025. }
  1026. }
  1027. /// <summary>
  1028. /// 2012-2-21新增重载,执行查询语句,返回DataSet
  1029. /// </summary>
  1030. /// <param name="connection">SqlConnection对象</param>
  1031. /// <param name="trans">SqlTransaction事务</param>
  1032. /// <param name="SQLString">查询语句</param>
  1033. /// <returns>DataSet</returns>
  1034. public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  1035. {
  1036. SqlCommand cmd = new SqlCommand();
  1037. PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  1038. using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  1039. {
  1040. DataSet ds = new DataSet();
  1041. try
  1042. {
  1043. da.Fill(ds, "ds");
  1044. cmd.Parameters.Clear();
  1045. }
  1046. catch (System.Data.SqlClient.SqlException ex)
  1047. {
  1048. trans.Rollback();
  1049. throw new Exception(ex.Message);
  1050. }
  1051. return ds;
  1052. }
  1053. }
  1054. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
  1055. {
  1056. if (conn.State != ConnectionState.Open)
  1057. conn.Open();
  1058. cmd.Connection = conn;
  1059. cmd.CommandText = cmdText;
  1060. if (trans != null)
  1061. cmd.Transaction = trans;
  1062. cmd.CommandType = CommandType.Text;//cmdType;
  1063. if (cmdParms != null)
  1064. {
  1065. foreach (SqlParameter parameter in cmdParms)
  1066. {
  1067. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  1068. (parameter.Value == null))
  1069. {
  1070. parameter.Value = DBNull.Value;
  1071. }
  1072. cmd.Parameters.Add(parameter);
  1073. }
  1074. }
  1075. }
  1076. #endregion
  1077. #region 存储过程操作
  1078. /// <summary>
  1079. /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  1080. /// </summary>
  1081. /// <param name="storedProcName">存储过程名</param>
  1082. /// <param name="parameters">存储过程参数</param>
  1083. /// <returns>SqlDataReader</returns>
  1084. public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
  1085. {
  1086. SqlConnection connection = new SqlConnection(connectionString);
  1087. SqlDataReader returnReader;
  1088. connection.Open();
  1089. SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  1090. command.CommandType = CommandType.StoredProcedure;
  1091. returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
  1092. return returnReader;
  1093. }
  1094. /// <summary>
  1095. /// 执行存储过程
  1096. /// </summary>
  1097. /// <param name="storedProcName">存储过程名</param>
  1098. /// <param name="parameters">存储过程参数</param>
  1099. /// <param name="tableName">DataSet结果中的表名</param>
  1100. /// <returns>DataSet</returns>
  1101. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
  1102. {
  1103. using (SqlConnection connection = new SqlConnection(connectionString))
  1104. {
  1105. DataSet dataSet = new DataSet();
  1106. connection.Open();
  1107. SqlDataAdapter sqlDA = new SqlDataAdapter();
  1108. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  1109. sqlDA.Fill(dataSet, tableName);
  1110. connection.Close();
  1111. return dataSet;
  1112. }
  1113. }
  1114. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)
  1115. {
  1116. using (SqlConnection connection = new SqlConnection(connectionString))
  1117. {
  1118. DataSet dataSet = new DataSet();
  1119. connection.Open();
  1120. SqlDataAdapter sqlDA = new SqlDataAdapter();
  1121. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  1122. sqlDA.SelectCommand.CommandTimeout = Times;
  1123. sqlDA.Fill(dataSet, tableName);
  1124. connection.Close();
  1125. return dataSet;
  1126. }
  1127. }
  1128. public static DataSet RunProcedure(string storedProcName, Dictionary<String, String> paras, string tableName)
  1129. {
  1130. List<SqlParameter> ps = new List<SqlParameter>();
  1131. foreach (KeyValuePair<string, string> kvp in paras)
  1132. {
  1133. ps.Add(new SqlParameter(kvp.Key, kvp.Value));
  1134. }
  1135. using (SqlConnection connection = new SqlConnection(connectionString))
  1136. {
  1137. DataSet dataSet = new DataSet();
  1138. connection.Open();
  1139. SqlDataAdapter sqlDA = new SqlDataAdapter();
  1140. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, ps.ToArray());
  1141. sqlDA.Fill(dataSet, tableName);
  1142. connection.Close();
  1143. return dataSet;
  1144. }
  1145. }
  1146. /// <summary>
  1147. /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
  1148. /// </summary>
  1149. /// <param name="connection">数据库连接</param>
  1150. /// <param name="storedProcName">存储过程名</param>
  1151. /// <param name="parameters">存储过程参数</param>
  1152. /// <returns>SqlCommand</returns>
  1153. private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  1154. {
  1155. SqlCommand command = new SqlCommand(storedProcName, connection);
  1156. command.CommandType = CommandType.StoredProcedure;
  1157. foreach (SqlParameter parameter in parameters)
  1158. {
  1159. if (parameter != null)
  1160. {
  1161. // 检查未分配值的输出参数,将其分配以DBNull.Value.
  1162. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  1163. (parameter.Value == null))
  1164. {
  1165. parameter.Value = DBNull.Value;
  1166. }
  1167. command.Parameters.Add(parameter);
  1168. }
  1169. }
  1170. return command;
  1171. }
  1172. /// <summary>
  1173. /// 执行存储过程,返回影响的行数
  1174. /// </summary>
  1175. /// <param name="storedProcName">存储过程名</param>
  1176. /// <param name="parameters">存储过程参数</param>
  1177. /// <param name="rowsAffected">影响的行数</param>
  1178. /// <returns></returns>
  1179. public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
  1180. {
  1181. using (SqlConnection connection = new SqlConnection(connectionString))
  1182. {
  1183. int result;
  1184. connection.Open();
  1185. SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
  1186. rowsAffected = command.ExecuteNonQuery();
  1187. result = (int)command.Parameters["ReturnValue"].Value;
  1188. //Connection.Close();
  1189. return result;
  1190. }
  1191. }
  1192. /// <summary>
  1193. /// 创建 SqlCommand 对象实例(用来返回一个整数值)
  1194. /// </summary>
  1195. /// <param name="storedProcName">存储过程名</param>
  1196. /// <param name="parameters">存储过程参数</param>
  1197. /// <returns>SqlCommand 对象实例</returns>
  1198. private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  1199. {
  1200. SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  1201. command.Parameters.Add(new SqlParameter("ReturnValue",
  1202. SqlDbType.Int, 4, ParameterDirection.ReturnValue,
  1203. false, 0, 0, string.Empty, DataRowVersion.Default, null));
  1204. return command;
  1205. }
  1206. #endregion
  1207. /// <summary>
  1208. /// 执行多条SQL语句,实现数据库事务。
  1209. /// </summary>
  1210. /// <param name="SQLStringList">多条SQL语句</param>
  1211. public static int ExecuteSqlTran(List<String> SQLStringList, SqlConnection con)
  1212. {
  1213. if (con.State == ConnectionState.Closed)
  1214. {
  1215. con.Open();
  1216. }
  1217. SqlCommand cmd = new SqlCommand();
  1218. cmd.Connection = con;
  1219. SqlTransaction tx = con.BeginTransaction();
  1220. cmd.Transaction = tx;
  1221. try
  1222. {
  1223. int count = 0;
  1224. for (int n = 0; n < SQLStringList.Count; n++)
  1225. {
  1226. string strsql = SQLStringList[n];
  1227. if (strsql.Trim().Length > 1)
  1228. {
  1229. cmd.CommandText = strsql;
  1230. count += cmd.ExecuteNonQuery();
  1231. }
  1232. }
  1233. tx.Commit();
  1234. return count;
  1235. }
  1236. catch
  1237. {
  1238. tx.Rollback();
  1239. return 0;
  1240. }
  1241. }
  1242. /// <summary>
  1243. /// 执行多条SQL语句,实现数据库事务。
  1244. /// </summary>
  1245. /// <param name="SQLStringList">多条SQL语句</param>
  1246. public static int ExecuteSqlTransaction(List<String> SQLStringList)
  1247. {
  1248. using (SqlConnection con = new SqlConnection(connectionString))
  1249. {
  1250. if (con.State == ConnectionState.Closed)
  1251. {
  1252. con.Open();
  1253. }
  1254. using (SqlCommand cmd = new SqlCommand())
  1255. {
  1256. cmd.Connection = con;
  1257. SqlTransaction tx = con.BeginTransaction();
  1258. cmd.Transaction = tx;
  1259. try
  1260. {
  1261. int count = 0;
  1262. for (int n = 0; n < SQLStringList.Count; n++)
  1263. {
  1264. string strsql = SQLStringList[n];
  1265. if (strsql.Trim().Length > 1)
  1266. {
  1267. cmd.CommandText = strsql;
  1268. count += cmd.ExecuteNonQuery();
  1269. }
  1270. }
  1271. tx.Commit();
  1272. return count;
  1273. }
  1274. catch
  1275. {
  1276. tx.Rollback();
  1277. return 0;
  1278. }
  1279. }
  1280. }
  1281. }
  1282. #region 执行分页存储过程
  1283. /// <summary>
  1284. /// 执行存储过程Pagination分页
  1285. /// </summary>
  1286. /// <param name="TableName">表名或视图名或一个select语句</param>
  1287. /// <param name="PK">主键名</param>
  1288. /// <param name="Fields">返回的字段</param>
  1289. /// <param name="WhereStr">Where条件(and id=1 and name=222)</param>
  1290. /// <param name="OrderStr">排序(order by Id desc,time desc)</param>
  1291. /// <param name="PageSize">每页记录数</param>
  1292. /// <param name="PageIndex">页码</param>
  1293. /// <param name="IsCount">是否返回总记录数</param>
  1294. /// <param name="RecordCount">输出总记录数(不需返回时为0)</param>
  1295. /// <returns></returns>
  1296. public static DataTable RunPagination(string TableName, string PK, string Fields, string WhereStr, string OrderStr, int PageSize, int PageIndex, bool IsCount, out int RecordCount)
  1297. {
  1298. SqlParameter[] Paras =
  1299. {
  1300. new SqlParameter("@SqlTable",SqlDbType.VarChar,1000),
  1301. new SqlParameter("@SqlPK",SqlDbType.VarChar,50),
  1302. new SqlParameter("@SqlField",SqlDbType.VarChar,1000),
  1303. new SqlParameter("@SqlWhere",SqlDbType.VarChar,1000),
  1304. new SqlParameter("@SqlOrder",SqlDbType.VarChar,200),
  1305. new SqlParameter("@PageSize",SqlDbType.Int),
  1306. new SqlParameter("@PageIndex",SqlDbType.Int),
  1307. new SqlParameter("@IsCount",SqlDbType.Bit),
  1308. new SqlParameter("@RecordCount",SqlDbType.Int)
  1309. };
  1310. Paras[0].Value = TableName;
  1311. Paras[1].Value = PK;
  1312. Paras[2].Value = Fields;
  1313. Paras[3].Value = WhereStr;
  1314. Paras[4].Value = OrderStr;
  1315. Paras[5].Value = PageSize;
  1316. Paras[6].Value = PageIndex;
  1317. Paras[7].Value = Convert.ToInt32(IsCount);
  1318. Paras[8].Direction = ParameterDirection.Output;
  1319. DataSet PageSet = RunProcedure("[Pagination]", Paras, "Pager");
  1320. RecordCount = IsCount ? Convert.ToInt32(Paras[8].Value) : 0;
  1321. return PageSet.Tables["Pager"];
  1322. }
  1323. public static DataTable ExecuteDataTable(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  1324. {
  1325. //create a command and prepare it for execution
  1326. SqlCommand cmd = new SqlCommand();
  1327. PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);
  1328. //create the DataAdapter & DataTable
  1329. SqlDataAdapter da = new SqlDataAdapter(cmd);
  1330. DataTable dt = new DataTable();
  1331. //fill the DataTable using default values for DataTable names, etc.
  1332. da.Fill(dt);
  1333. // detach the SqlParameters from the command object, so they can be used again.
  1334. cmd.Parameters.Clear();
  1335. connection.Close();
  1336. connection.Dispose();
  1337. //return the DataTable
  1338. return dt;
  1339. }
  1340. /// <summary>
  1341. /// Prepare a command for execution
  1342. /// </summary>
  1343. /// <param name="cmd">SqlCommand object</param>
  1344. /// <param name="conn">SqlConnection object</param>
  1345. /// <param name="trans">SqlTransaction object</param>
  1346. /// <param name="cmdType">Cmd type e.g. stored procedure or text</param>
  1347. /// <param name="cmdText">Command text, e.g. Select * from Products</param>
  1348. /// <param name="cmdParms">SqlParameters to use in the command</param>
  1349. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
  1350. {
  1351. if (conn.State != ConnectionState.Open)
  1352. conn.Open();
  1353. cmd.Connection = conn;
  1354. cmd.CommandText = cmdText;
  1355. cmd.CommandTimeout = 300;
  1356. if (trans != null)
  1357. cmd.Transaction = trans;
  1358. cmd.CommandType = cmdType;
  1359. if (cmdParms != null)
  1360. {
  1361. foreach (SqlParameter parm in cmdParms)
  1362. {
  1363. if (parm.Value == null)
  1364. {
  1365. parm.Value = DBNull.Value;
  1366. }
  1367. cmd.Parameters.Add(parm);
  1368. }
  1369. }
  1370. }
  1371. #endregion
  1372. #region 大量数据导入
  1373. public static void SqlBulkCopyByDatatable(string TableName, DataTable dt)
  1374. {
  1375. using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))
  1376. {
  1377. try
  1378. {
  1379. sqlbulkcopy.DestinationTableName = TableName;
  1380. for (int i = 0; i < dt.Columns.Count; i++)
  1381. {
  1382. sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
  1383. }
  1384. sqlbulkcopy.WriteToServer(dt);
  1385. }
  1386. catch (System.Exception ex)
  1387. {
  1388. throw ex;
  1389. }
  1390. }
  1391. }
  1392. #endregion
  1393. }
  1394. }