You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

691 lines
29 KiB

3 months ago
2 weeks ago
3 months ago
  1. using NFine.Code;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Data.Common;
  7. using System.Data.SqlClient;
  8. namespace NFine.Data.Extensions
  9. {
  10. public class DbHelper
  11. {
  12. /// <summary>
  13. /// 调试日志
  14. /// </summary>
  15. //public static LogHelper log = LogFactory.GetLogger(typeof(DbHelper));
  16. /// <summary>
  17. /// 连接字符串
  18. /// </summary>
  19. public static string ConnectionString { get; set; }
  20. /// <summary>
  21. /// 数据库类型
  22. /// </summary>
  23. public static DatabaseType DbType { get; set; }
  24. /// <summary>
  25. /// 数据库命名参数符号
  26. /// </summary>
  27. public static string DbParmChar { get; set; }
  28. public DbHelper(string connstring)
  29. {
  30. string ConStringDESEncrypt = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
  31. ConnectionString = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
  32. if (ConStringDESEncrypt == "true")
  33. {
  34. ConnectionString = DESEncrypt.Decrypt(ConnectionString);
  35. }
  36. this.DatabaseTypeEnumParse(ConfigurationManager.ConnectionStrings["connstr"].ProviderName);
  37. DbParmChar = DbFactory.CreateDbParmCharacter();
  38. }
  39. /// <summary>
  40. /// 执行 SQL 语句,并返回受影响的行数。
  41. /// </summary>
  42. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  43. /// <param name="cmdText">存储过程名称或者T-SQL命令行</param>
  44. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  45. /// <returns></returns>
  46. public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] parameters)
  47. {
  48. int num = 0;
  49. try
  50. {
  51. DbCommand cmd = DbFactory.CreateDbCommand();
  52. using (DbConnection conn = DbFactory.CreateDbConnection(ConnectionString))
  53. {
  54. PrepareCommand(cmd, conn, null, cmdType, cmdText, parameters);
  55. num = cmd.ExecuteNonQuery();
  56. cmd.Parameters.Clear();
  57. }
  58. }
  59. catch (Exception ex)
  60. {
  61. num = -1;
  62. //log.Error(ex.Message);
  63. }
  64. return num;
  65. }
  66. /// <summary>
  67. /// 依靠数据库连接字符串connectionString,
  68. /// 使用所提供参数,执行返回首行首列命令
  69. /// </summary>
  70. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  71. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  72. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  73. public static object ExecuteScalarByVenDor(CommandType cmdType, string cmdText)
  74. {
  75. try
  76. {
  77. ConnectionString = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
  78. DbHelper.DbType = DatabaseType.SqlServer;
  79. DbCommand cmd = DbFactory.CreateDbCommand();
  80. using (DbConnection connection = DbFactory.CreateDbConnection(ConnectionString))
  81. {
  82. PrepareCommand(cmd, connection, null, cmdType, cmdText, null);
  83. object val = cmd.ExecuteScalar();
  84. cmd.Parameters.Clear();
  85. return val;
  86. }
  87. }
  88. catch (Exception ex)
  89. {
  90. //log.Error(ex.Message);
  91. throw;
  92. }
  93. }
  94. /// <summary>
  95. /// 执行 SQL 语句,并返回受影响的行数。
  96. /// </summary>
  97. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  98. /// <param name="cmdText">存储过程名称或者T-SQL命令行</param>
  99. /// <returns></returns>
  100. public static int ExecuteNonQuery(CommandType cmdType, string cmdText)
  101. {
  102. int num = 0;
  103. try
  104. {
  105. DbCommand cmd = DbFactory.CreateDbCommand();
  106. using (DbConnection conn = DbFactory.CreateDbConnection(ConnectionString))
  107. {
  108. PrepareCommand(cmd, conn, null, cmdType, cmdText, null);
  109. num = cmd.ExecuteNonQuery();
  110. cmd.Parameters.Clear();
  111. }
  112. }
  113. catch (Exception ex)
  114. {
  115. num = -1;
  116. //log.Error(ex.Message);
  117. }
  118. return num;
  119. }
  120. /// <summary>
  121. /// 执行 SQL 语句,并返回受影响的行数。
  122. /// </summary>
  123. /// <param name="conn">数据库连接对象</param>
  124. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  125. /// <param name="cmdText">存储过程名称或者T-SQL命令行</param>
  126. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  127. /// <returns></returns>
  128. public static int ExecuteNonQuery(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] parameters)
  129. {
  130. int num = 0;
  131. try
  132. {
  133. DbCommand cmd = DbFactory.CreateDbCommand();
  134. PrepareCommand(cmd, connection, null, cmdType, cmdText, parameters);
  135. num = cmd.ExecuteNonQuery();
  136. cmd.Parameters.Clear();
  137. }
  138. catch (Exception ex)
  139. {
  140. num = -1;
  141. //log.Error(ex.Message);
  142. }
  143. return num;
  144. }
  145. /// <summary>
  146. /// 执行 SQL 语句,并返回受影响的行数。
  147. /// </summary>
  148. /// <param name="conn">数据库连接对象</param>
  149. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  150. /// <param name="cmdText">存储过程名称或者T-SQL命令行</param>
  151. /// <returns></returns>
  152. public static int ExecuteNonQuery(DbConnection connection, CommandType cmdType, string cmdText)
  153. {
  154. int num = 0;
  155. try
  156. {
  157. DbCommand cmd = DbFactory.CreateDbCommand();
  158. PrepareCommand(cmd, connection, null, cmdType, cmdText, null);
  159. num = cmd.ExecuteNonQuery();
  160. cmd.Parameters.Clear();
  161. }
  162. catch (Exception ex)
  163. {
  164. num = -1;
  165. //log.Error(ex.Message);
  166. }
  167. return num;
  168. }
  169. /// <summary>
  170. /// 执行 SQL 语句,并返回受影响的行数。
  171. /// </summary>
  172. /// <param name="isOpenTrans">事务对象</param>
  173. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  174. /// <param name="cmdText">存储过程名称或者T-SQL命令行</param>
  175. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  176. /// <returns></returns>
  177. public static int ExecuteNonQuery(DbTransaction isOpenTrans, CommandType cmdType, string cmdText, params DbParameter[] parameters)
  178. {
  179. int num = 0;
  180. try
  181. {
  182. DbCommand cmd = DbFactory.CreateDbCommand();
  183. if (isOpenTrans == null || isOpenTrans.Connection == null)
  184. {
  185. using (DbConnection conn = DbFactory.CreateDbConnection(ConnectionString))
  186. {
  187. PrepareCommand(cmd, conn, isOpenTrans, cmdType, cmdText, parameters);
  188. num = cmd.ExecuteNonQuery();
  189. }
  190. }
  191. else
  192. {
  193. PrepareCommand(cmd, isOpenTrans.Connection, isOpenTrans, cmdType, cmdText, parameters);
  194. num = cmd.ExecuteNonQuery();
  195. }
  196. cmd.Parameters.Clear();
  197. }
  198. catch (Exception ex)
  199. {
  200. num = -1;
  201. //log.Error(ex.Message);
  202. }
  203. return num;
  204. }
  205. /// <summary>
  206. /// 执行 SQL 语句,并返回受影响的行数。
  207. /// </summary>
  208. /// <param name="isOpenTrans">事务对象</param>
  209. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  210. /// <param name="cmdText">存储过程名称或者T-SQL命令行</param>
  211. /// <returns></returns>
  212. public static int ExecuteNonQuery(DbTransaction isOpenTrans, CommandType cmdType, string cmdText)
  213. {
  214. int num = 0;
  215. try
  216. {
  217. DbCommand cmd = DbFactory.CreateDbCommand();
  218. PrepareCommand(cmd, isOpenTrans.Connection, isOpenTrans, cmdType, cmdText, null);
  219. num = cmd.ExecuteNonQuery();
  220. cmd.Parameters.Clear();
  221. }
  222. catch (Exception ex)
  223. {
  224. num = -1;
  225. //log.Error(ex.Message);
  226. }
  227. return num;
  228. }
  229. /// <summary>
  230. /// 使用提供的参数,执行有结果集返回的数据库操作命令、并返回SqlDataReader对象
  231. /// </summary>
  232. /// <param name="isOpenTrans">事务对象</param>
  233. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  234. /// <param name="commandText">存储过程名称或者T-SQL命令行<</param>
  235. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  236. /// <returns>返回SqlDataReader对象</returns>
  237. public static IDataReader ExecuteReader(DbTransaction isOpenTrans, CommandType cmdType, string cmdText, params DbParameter[] parameters)
  238. {
  239. DbCommand cmd = DbFactory.CreateDbCommand();
  240. DbConnection conn = DbFactory.CreateDbConnection(ConnectionString);
  241. try
  242. {
  243. PrepareCommand(cmd, conn, isOpenTrans, cmdType, cmdText, parameters);
  244. IDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  245. cmd.Parameters.Clear();
  246. return rdr;
  247. }
  248. catch (Exception ex)
  249. {
  250. conn.Close();
  251. cmd.Dispose();
  252. //log.Error(ex.Message);
  253. throw;
  254. }
  255. }
  256. public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  257. {
  258. SqlCommand cmd = new SqlCommand();
  259. SqlConnection conn = new SqlConnection(connectionString);
  260. // we use a try/catch here because if the method throws an exception we want to
  261. // close the connection throw code, because no datareader will exist, hence the
  262. // commandBehaviour.CloseConnection will not work
  263. try
  264. {
  265. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  266. SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  267. cmd.Parameters.Clear();
  268. return rdr;
  269. }
  270. catch
  271. {
  272. conn.Close();
  273. throw;
  274. }
  275. }
  276. /// <summary>
  277. /// 返回一个数据表
  278. /// </summary>
  279. /// <param name="connectionString">数据库连接字符串</param>
  280. /// <param name="cmdType">命令类型</param>
  281. /// <param name="cmdText">SQL语句</param>
  282. /// <param name="commandParameters">参数</param>
  283. /// <param name="strTableName">数据表名</param>
  284. /// <param name="bIsLoadStru">是否加载数据表结构</param>
  285. /// <returns></returns>
  286. public static DataTable ExecuteTable(string connectionString, CommandType cmdType, string cmdText, bool bIsLoadStru, params SqlParameter[] commandParameters)
  287. {
  288. using (SqlConnection connection = new SqlConnection(connectionString))
  289. {
  290. DataTable dt = ExecuteTable(connection, cmdType, cmdText, bIsLoadStru, commandParameters);
  291. connection.Close();
  292. return dt;
  293. }
  294. }
  295. /// <summary>
  296. /// 返回一个数据表
  297. /// </summary>
  298. /// <param name="connection">数据库连接</param>
  299. /// <param name="cmdType">命令类型</param>
  300. /// <param name="cmdText">SQL语句</param>
  301. /// <param name="commandParameters">参数</param>
  302. /// <param name="strTableName">数据表名</param>
  303. /// <param name="bIsLoadStru">是否加载数据表结构</param>
  304. /// <returns></returns>
  305. public static DataTable ExecuteTable(SqlConnection connection, CommandType cmdType, string cmdText, bool bIsLoadStru, params SqlParameter[] commandParameters)
  306. {
  307. DataSet ds = new DataSet();
  308. SqlCommand cmd = new SqlCommand();
  309. PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
  310. SqlDataAdapter da = new SqlDataAdapter(cmd);
  311. if (bIsLoadStru)
  312. {
  313. da.FillSchema(ds, SchemaType.Source);
  314. }
  315. da.Fill(ds);
  316. cmd.Parameters.Clear();
  317. return ds.Tables[0];
  318. }
  319. public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  320. {
  321. SqlCommand cmd = new SqlCommand();
  322. using (SqlConnection conn = new SqlConnection(connectionString))
  323. {
  324. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  325. int val = cmd.ExecuteNonQuery();
  326. cmd.Parameters.Clear();
  327. return val;
  328. }
  329. }
  330. /// <summary>
  331. /// 使用提供的参数,执行有结果集返回的数据库操作命令、并返回SqlDataReader对象
  332. /// </summary>
  333. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  334. /// <param name="commandText">存储过程名称或者T-SQL命令行<</param>
  335. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  336. /// <returns>返回SqlDataReader对象</returns>
  337. public static IDataReader ExecuteReader(CommandType cmdType, string cmdText, params DbParameter[] parameters)
  338. {
  339. DbCommand cmd = DbFactory.CreateDbCommand();
  340. DbConnection conn = DbFactory.CreateDbConnection(ConnectionString);
  341. try
  342. {
  343. PrepareCommand(cmd, conn, null, cmdType, cmdText, parameters);
  344. IDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  345. cmd.Parameters.Clear();
  346. return rdr;
  347. }
  348. catch (Exception ex)
  349. {
  350. conn.Close();
  351. cmd.Dispose();
  352. //log.Error(ex.Message);
  353. throw;
  354. }
  355. }
  356. /// <summary>
  357. ///使用提供的参数,执行有结果集返回的数据库操作命令、并返回SqlDataReader对象
  358. /// </summary>
  359. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  360. /// <param name="commandText">存储过程名称或者T-SQL命令行<</param>
  361. /// <returns>返回SqlDataReader对象</returns>
  362. public static IDataReader ExecuteReader(CommandType cmdType, string cmdText)
  363. {
  364. DbCommand cmd = DbFactory.CreateDbCommand();
  365. DbConnection conn = DbFactory.CreateDbConnection(ConnectionString);
  366. try
  367. {
  368. PrepareCommand(cmd, conn, null, cmdType, cmdText, null);
  369. IDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  370. cmd.Parameters.Clear();
  371. return rdr;
  372. }
  373. catch (Exception ex)
  374. {
  375. conn.Close();
  376. cmd.Dispose();
  377. //log.Error(ex.Message);
  378. throw;
  379. }
  380. }
  381. /// <summary>
  382. /// 查询数据填充到数据集DataSet中
  383. /// </summary>
  384. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  385. /// <param name="cmdText">命令文本</param>
  386. /// <param name="parameters">sql语句对应参数</param>
  387. /// <returns>数据集DataSet对象</returns>
  388. public static DataSet GetDataSet(CommandType cmdType, string cmdText, params DbParameter[] parameters)
  389. {
  390. DataSet ds = new DataSet();
  391. DbCommand cmd = DbFactory.CreateDbCommand();
  392. DbConnection conn = DbFactory.CreateDbConnection(ConnectionString);
  393. try
  394. {
  395. PrepareCommand(cmd, conn, null, cmdType, cmdText, parameters);
  396. IDbDataAdapter sda = DbFactory.CreateDataAdapter(cmd);
  397. sda.Fill(ds);
  398. return ds;
  399. }
  400. catch (Exception ex)
  401. {
  402. conn.Close();
  403. cmd.Dispose();
  404. //log.Error(ex.Message);
  405. throw;
  406. }
  407. }
  408. /// <summary>
  409. /// 查询数据填充到数据集DataSet中
  410. /// </summary>
  411. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  412. /// <param name="cmdText">命令文本</param>
  413. /// <returns>数据集DataSet对象</returns>
  414. public static DataSet GetDataSet(CommandType cmdType, string cmdText)
  415. {
  416. DataSet ds = new DataSet();
  417. DbCommand cmd = DbFactory.CreateDbCommand();
  418. DbConnection conn = DbFactory.CreateDbConnection(ConnectionString);
  419. try
  420. {
  421. PrepareCommand(cmd, conn, null, cmdType, cmdText, null);
  422. IDbDataAdapter sda = DbFactory.CreateDataAdapter(cmd);
  423. sda.Fill(ds);
  424. return ds;
  425. }
  426. catch (Exception ex)
  427. {
  428. conn.Close();
  429. cmd.Dispose();
  430. //log.Error(ex.Message);
  431. throw;
  432. }
  433. }
  434. /// <summary>
  435. /// 依靠数据库连接字符串connectionString,
  436. /// 使用所提供参数,执行返回首行首列命令
  437. /// </summary>
  438. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  439. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  440. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  441. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  442. public static object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] parameters)
  443. {
  444. try
  445. {
  446. DbCommand cmd = DbFactory.CreateDbCommand();
  447. cmd.CommandTimeout = 60;
  448. using (DbConnection connection = DbFactory.CreateDbConnection(ConnectionString))
  449. {
  450. PrepareCommand(cmd, connection, null, cmdType, cmdText, parameters);
  451. object val = cmd.ExecuteScalar();
  452. cmd.Parameters.Clear();
  453. return val;
  454. }
  455. }
  456. catch (Exception ex)
  457. {
  458. //log.Error(ex.Message);
  459. throw;
  460. }
  461. }
  462. /// <summary>
  463. /// 依靠数据库连接字符串connectionString,
  464. /// 使用所提供参数,执行返回首行首列命令
  465. /// </summary>
  466. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  467. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  468. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  469. public static object ExecuteScalar(CommandType cmdType, string cmdText)
  470. {
  471. try
  472. {
  473. DbCommand cmd = DbFactory.CreateDbCommand();
  474. using (DbConnection connection = DbFactory.CreateDbConnection(ConnectionString))
  475. {
  476. PrepareCommand(cmd, connection, null, cmdType, cmdText, null);
  477. object val = cmd.ExecuteScalar();
  478. cmd.Parameters.Clear();
  479. return val;
  480. }
  481. }
  482. catch (Exception ex)
  483. {
  484. //log.Error(ex.Message);
  485. throw;
  486. }
  487. }
  488. /// <summary>
  489. ///依靠数据库连接字符串connectionString,
  490. /// 使用所提供参数,执行返回首行首列命令
  491. /// </summary>
  492. /// <param name="connection">数据库连接对象</param>
  493. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  494. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  495. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  496. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  497. public static object ExecuteScalar(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] parameters)
  498. {
  499. try
  500. {
  501. DbCommand cmd = DbFactory.CreateDbCommand();
  502. PrepareCommand(cmd, connection, null, cmdType, cmdText, parameters);
  503. object val = cmd.ExecuteScalar();
  504. cmd.Parameters.Clear();
  505. return val;
  506. }
  507. catch (Exception ex)
  508. {
  509. //log.Error(ex.Message);
  510. throw;
  511. }
  512. }
  513. /// <summary>
  514. ///依靠数据库连接字符串connectionString,
  515. /// 使用所提供参数,执行返回首行首列命令
  516. /// </summary>
  517. /// <param name="connection">数据库连接对象</param>
  518. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  519. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  520. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  521. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  522. public static object ExecuteScalar(DbConnection connection, CommandType cmdType, string cmdText)
  523. {
  524. try
  525. {
  526. DbCommand cmd = DbFactory.CreateDbCommand();
  527. PrepareCommand(cmd, connection, null, cmdType, cmdText, null);
  528. object val = cmd.ExecuteScalar();
  529. cmd.Parameters.Clear();
  530. return val;
  531. }
  532. catch (Exception ex)
  533. {
  534. //log.Error(ex.Message);
  535. throw;
  536. }
  537. }
  538. /// <summary>
  539. ///依靠数据库连接字符串connectionString,
  540. /// 使用所提供参数,执行返回首行首列命令
  541. /// </summary>
  542. /// <param name="connection">数据库连接对象</param>
  543. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  544. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  545. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  546. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  547. public static object ExecuteScalar(DbConnection conn, DbTransaction isOpenTrans, CommandType cmdType, string cmdText)
  548. {
  549. try
  550. {
  551. DbCommand cmd = DbFactory.CreateDbCommand();
  552. PrepareCommand(cmd, conn, isOpenTrans, cmdType, cmdText, null);
  553. object val = cmd.ExecuteScalar();
  554. cmd.Parameters.Clear();
  555. return val;
  556. }
  557. catch (Exception ex)
  558. {
  559. //log.Error(ex.Message);
  560. throw;
  561. }
  562. }
  563. /// <summary>
  564. ///依靠数据库连接字符串connectionString,
  565. /// 使用所提供参数,执行返回首行首列命令
  566. /// </summary>
  567. /// <param name="isOpenTrans">事务</param>
  568. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  569. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  570. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  571. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  572. public static object ExecuteScalar(DbTransaction isOpenTrans, CommandType cmdType, string cmdText, params DbParameter[] parameters)
  573. {
  574. try
  575. {
  576. DbCommand cmd = DbFactory.CreateDbCommand();
  577. PrepareCommand(cmd, isOpenTrans.Connection, isOpenTrans, cmdType, cmdText, parameters);
  578. object val = cmd.ExecuteScalar();
  579. cmd.Parameters.Clear();
  580. return val;
  581. }
  582. catch (Exception ex)
  583. {
  584. //log.Error(ex.Message);
  585. throw;
  586. }
  587. }
  588. /// <summary>
  589. /// 为即将执行准备一个命令
  590. /// </summary>
  591. /// <param name="cmd">SqlCommand对象</param>
  592. /// <param name="conn">SqlConnection对象</param>
  593. /// <param name="isOpenTrans">DbTransaction对象</param>
  594. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  595. /// <param name="cmdText">存储过程名称或者T-SQL命令行, e.g. Select * from Products</param>
  596. /// <param name="cmdParms">SqlParameters to use in the command</param>
  597. private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction isOpenTrans, CommandType cmdType, string cmdText, DbParameter[] cmdParms)
  598. {
  599. if (conn.State != ConnectionState.Open)
  600. conn.Open();
  601. cmd.Connection = conn;
  602. cmd.CommandText = cmdText;
  603. if (isOpenTrans != null)
  604. cmd.Transaction = isOpenTrans;
  605. cmd.CommandType = cmdType;
  606. if (cmdParms != null)
  607. {
  608. cmd.Parameters.AddRange(cmdParms);
  609. }
  610. }
  611. /// <summary>
  612. /// 用于数据库类型的字符串枚举转换
  613. /// </summary>
  614. /// <typeparam name="T"></typeparam>
  615. /// <param name="value"></param>
  616. /// <returns></returns>
  617. public void DatabaseTypeEnumParse(string value)
  618. {
  619. try
  620. {
  621. switch (value)
  622. {
  623. case "System.Data.SqlClient":
  624. DbType = DatabaseType.SqlServer;
  625. break;
  626. case "System.Data.OracleClient":
  627. DbType = DatabaseType.Oracle;
  628. break;
  629. case "MySql.Data.MySqlClient":
  630. DbType = DatabaseType.MySql;
  631. break;
  632. case "System.Data.OleDb":
  633. DbType = DatabaseType.Access;
  634. break;
  635. case "System.Data.SQLite":
  636. DbType = DatabaseType.SQLite;
  637. break;
  638. default:
  639. break;
  640. }
  641. }
  642. catch
  643. {
  644. throw new Exception("数据库类型\"" + value + "\"错误,请检查!");
  645. }
  646. }
  647. //public static string InsertSQL(string TableName, Dictionary<string, string> values)
  648. //{
  649. // try
  650. // {
  651. // string col = string.Empty;
  652. // string value = string.Empty;
  653. // foreach (var item in values)
  654. // {
  655. // col += item.Key + ",";
  656. // value += item.Value + ",";
  657. // }
  658. // if (!string.IsNullOrWhiteSpace(value))
  659. // {
  660. // return string.Format("INSERT INTO {0} ({1}) SELECT {2} FROM ", TableName, col.TrimEnd(','), value.TrimEnd(','));
  661. // }
  662. // return value;
  663. // }
  664. // catch (Exception ex)
  665. // {
  666. // log.Error(ex.ToString());
  667. // throw;
  668. // }
  669. //}
  670. }
  671. }