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.

690 lines
29 KiB

3 days 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. using (DbConnection connection = DbFactory.CreateDbConnection(ConnectionString))
  448. {
  449. PrepareCommand(cmd, connection, null, cmdType, cmdText, parameters);
  450. object val = cmd.ExecuteScalar();
  451. cmd.Parameters.Clear();
  452. return val;
  453. }
  454. }
  455. catch (Exception ex)
  456. {
  457. //log.Error(ex.Message);
  458. throw;
  459. }
  460. }
  461. /// <summary>
  462. /// 依靠数据库连接字符串connectionString,
  463. /// 使用所提供参数,执行返回首行首列命令
  464. /// </summary>
  465. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  466. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  467. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  468. public static object ExecuteScalar(CommandType cmdType, string cmdText)
  469. {
  470. try
  471. {
  472. DbCommand cmd = DbFactory.CreateDbCommand();
  473. using (DbConnection connection = DbFactory.CreateDbConnection(ConnectionString))
  474. {
  475. PrepareCommand(cmd, connection, null, cmdType, cmdText, null);
  476. object val = cmd.ExecuteScalar();
  477. cmd.Parameters.Clear();
  478. return val;
  479. }
  480. }
  481. catch (Exception ex)
  482. {
  483. //log.Error(ex.Message);
  484. throw;
  485. }
  486. }
  487. /// <summary>
  488. ///依靠数据库连接字符串connectionString,
  489. /// 使用所提供参数,执行返回首行首列命令
  490. /// </summary>
  491. /// <param name="connection">数据库连接对象</param>
  492. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  493. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  494. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  495. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  496. public static object ExecuteScalar(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] parameters)
  497. {
  498. try
  499. {
  500. DbCommand cmd = DbFactory.CreateDbCommand();
  501. PrepareCommand(cmd, connection, null, cmdType, cmdText, parameters);
  502. object val = cmd.ExecuteScalar();
  503. cmd.Parameters.Clear();
  504. return val;
  505. }
  506. catch (Exception ex)
  507. {
  508. //log.Error(ex.Message);
  509. throw;
  510. }
  511. }
  512. /// <summary>
  513. ///依靠数据库连接字符串connectionString,
  514. /// 使用所提供参数,执行返回首行首列命令
  515. /// </summary>
  516. /// <param name="connection">数据库连接对象</param>
  517. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  518. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  519. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  520. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  521. public static object ExecuteScalar(DbConnection connection, CommandType cmdType, string cmdText)
  522. {
  523. try
  524. {
  525. DbCommand cmd = DbFactory.CreateDbCommand();
  526. PrepareCommand(cmd, connection, null, cmdType, cmdText, null);
  527. object val = cmd.ExecuteScalar();
  528. cmd.Parameters.Clear();
  529. return val;
  530. }
  531. catch (Exception ex)
  532. {
  533. //log.Error(ex.Message);
  534. throw;
  535. }
  536. }
  537. /// <summary>
  538. ///依靠数据库连接字符串connectionString,
  539. /// 使用所提供参数,执行返回首行首列命令
  540. /// </summary>
  541. /// <param name="connection">数据库连接对象</param>
  542. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  543. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  544. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  545. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  546. public static object ExecuteScalar(DbConnection conn, DbTransaction isOpenTrans, CommandType cmdType, string cmdText)
  547. {
  548. try
  549. {
  550. DbCommand cmd = DbFactory.CreateDbCommand();
  551. PrepareCommand(cmd, conn, isOpenTrans, cmdType, cmdText, null);
  552. object val = cmd.ExecuteScalar();
  553. cmd.Parameters.Clear();
  554. return val;
  555. }
  556. catch (Exception ex)
  557. {
  558. //log.Error(ex.Message);
  559. throw;
  560. }
  561. }
  562. /// <summary>
  563. ///依靠数据库连接字符串connectionString,
  564. /// 使用所提供参数,执行返回首行首列命令
  565. /// </summary>
  566. /// <param name="isOpenTrans">事务</param>
  567. /// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
  568. /// <param name="commandText">存储过程名称或者T-SQL命令行</param>
  569. /// <param name="parameters">执行命令所需的sql语句对应参数</param>
  570. /// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
  571. public static object ExecuteScalar(DbTransaction isOpenTrans, CommandType cmdType, string cmdText, params DbParameter[] parameters)
  572. {
  573. try
  574. {
  575. DbCommand cmd = DbFactory.CreateDbCommand();
  576. PrepareCommand(cmd, isOpenTrans.Connection, isOpenTrans, cmdType, cmdText, parameters);
  577. object val = cmd.ExecuteScalar();
  578. cmd.Parameters.Clear();
  579. return val;
  580. }
  581. catch (Exception ex)
  582. {
  583. //log.Error(ex.Message);
  584. throw;
  585. }
  586. }
  587. /// <summary>
  588. /// 为即将执行准备一个命令
  589. /// </summary>
  590. /// <param name="cmd">SqlCommand对象</param>
  591. /// <param name="conn">SqlConnection对象</param>
  592. /// <param name="isOpenTrans">DbTransaction对象</param>
  593. /// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
  594. /// <param name="cmdText">存储过程名称或者T-SQL命令行, e.g. Select * from Products</param>
  595. /// <param name="cmdParms">SqlParameters to use in the command</param>
  596. private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction isOpenTrans, CommandType cmdType, string cmdText, DbParameter[] cmdParms)
  597. {
  598. if (conn.State != ConnectionState.Open)
  599. conn.Open();
  600. cmd.Connection = conn;
  601. cmd.CommandText = cmdText;
  602. if (isOpenTrans != null)
  603. cmd.Transaction = isOpenTrans;
  604. cmd.CommandType = cmdType;
  605. if (cmdParms != null)
  606. {
  607. cmd.Parameters.AddRange(cmdParms);
  608. }
  609. }
  610. /// <summary>
  611. /// 用于数据库类型的字符串枚举转换
  612. /// </summary>
  613. /// <typeparam name="T"></typeparam>
  614. /// <param name="value"></param>
  615. /// <returns></returns>
  616. public void DatabaseTypeEnumParse(string value)
  617. {
  618. try
  619. {
  620. switch (value)
  621. {
  622. case "System.Data.SqlClient":
  623. DbType = DatabaseType.SqlServer;
  624. break;
  625. case "System.Data.OracleClient":
  626. DbType = DatabaseType.Oracle;
  627. break;
  628. case "MySql.Data.MySqlClient":
  629. DbType = DatabaseType.MySql;
  630. break;
  631. case "System.Data.OleDb":
  632. DbType = DatabaseType.Access;
  633. break;
  634. case "System.Data.SQLite":
  635. DbType = DatabaseType.SQLite;
  636. break;
  637. default:
  638. break;
  639. }
  640. }
  641. catch
  642. {
  643. throw new Exception("数据库类型\"" + value + "\"错误,请检查!");
  644. }
  645. }
  646. //public static string InsertSQL(string TableName, Dictionary<string, string> values)
  647. //{
  648. // try
  649. // {
  650. // string col = string.Empty;
  651. // string value = string.Empty;
  652. // foreach (var item in values)
  653. // {
  654. // col += item.Key + ",";
  655. // value += item.Value + ",";
  656. // }
  657. // if (!string.IsNullOrWhiteSpace(value))
  658. // {
  659. // return string.Format("INSERT INTO {0} ({1}) SELECT {2} FROM ", TableName, col.TrimEnd(','), value.TrimEnd(','));
  660. // }
  661. // return value;
  662. // }
  663. // catch (Exception ex)
  664. // {
  665. // log.Error(ex.ToString());
  666. // throw;
  667. // }
  668. //}
  669. }
  670. }