OleDbDataAccess.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Data.OleDb;
  7. using System.Xml;
  8. using System.Data.SqlClient;
  9. using Microsoft.ApplicationBlocks.OleDb;
  10. using System.Configuration;
  11. namespace Ant.Data
  12. {
  13. public sealed class OleDbDataAccess : BaseDataAccess
  14. {
  15. #region DataAccess 成员
  16. private OleDbConnection OleDbConnection;
  17. private OleDbTransaction trans;
  18. public static string connstring = string.Empty;
  19. private DataAccess da;
  20. /// <summary>
  21. /// 构造函数
  22. /// </summary>
  23. /// <param name="connString"></param>
  24. public OleDbDataAccess(string connString)
  25. {
  26. this.OleDbConnection = new OleDbConnection(connString);
  27. connstring = connString;
  28. }
  29. /// <summary>
  30. /// 构造函数
  31. /// </summary>
  32. public OleDbDataAccess()
  33. {
  34. this.OleDbConnection = new OleDbConnection();
  35. }
  36. #region int ExecuteNonQuery
  37. /// <summary>
  38. /// 执行SQL命令
  39. /// </summary>
  40. /// <param name="commandText">SQL文本</param>
  41. /// <param name="commandType">命令类型</param>
  42. /// <param name="Parameters">命令执行时所需要的参数</param>
  43. /// <returns>受影响的行数</returns>
  44. public override int ExecuteNonQuery(string commandText, System.Data.CommandType commandType, QueryParameterCollection Parameters)
  45. {
  46. try
  47. {
  48. this.Open();
  49. OleDbCommand cmd = this.OleDbConnection.CreateCommand();
  50. cmd.CommandText = commandText;
  51. cmd.CommandType = commandType;
  52. if (trans != null)
  53. {
  54. cmd.Transaction = trans;
  55. }
  56. foreach (QueryParameter p in Parameters)
  57. {
  58. if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) &&
  59. (p.Value == null))
  60. {
  61. p.Value = DBNull.Value;
  62. }
  63. cmd.Parameters.Add(this.ToOleDbParameter(p));
  64. }
  65. int tmpValue = cmd.ExecuteNonQuery();
  66. //foreach (OleDbParameter p in cmd.Parameters)
  67. //{
  68. // Parameters[p.ParameterName] = ToQueryParameter(p);
  69. //}
  70. return tmpValue;
  71. }
  72. catch (Exception ex)
  73. {
  74. return -1;
  75. }
  76. finally
  77. {
  78. this.Close();
  79. }
  80. #region 另一种执行方法
  81. //int Count = 0;
  82. //using (OleDbConnection conn = new OleDbConnection(connstring))
  83. //{
  84. // conn.Open();
  85. // Count = OleDbHelper.ExecuteNonQuery(OleDbConnection, CommandType.Text, commandText);
  86. // return Count;
  87. //}
  88. #endregion
  89. }
  90. #endregion
  91. #region DataReader
  92. /// <summary>
  93. ///
  94. /// </summary>
  95. /// <param name="commandText"></param>
  96. /// <param name="commandType"></param>
  97. /// <param name="Parameters"></param>
  98. /// <returns></returns>
  99. public override DbDataReader ExecuteDataReader(string commandText, CommandType commandType, QueryParameterCollection Parameters)
  100. {
  101. try
  102. {
  103. if (IsClosed)
  104. {
  105. Open();
  106. }
  107. OleDbCommand cmd = this.OleDbConnection.CreateCommand();
  108. cmd.CommandText = commandText;
  109. cmd.CommandType = commandType;
  110. if (trans != null)
  111. {
  112. cmd.Transaction = trans;
  113. }
  114. if (Parameters != null)
  115. {
  116. foreach (QueryParameter p in Parameters)
  117. {
  118. cmd.Parameters.Add(ToOleDbParameter(p));
  119. }
  120. }
  121. OleDbDataReader reader = cmd.ExecuteReader();
  122. //foreach (OleDbParameter p in cmd.Parameters)
  123. //{
  124. // Parameters[p.ParameterName] = ToQueryParameter(p);
  125. //}
  126. return reader;
  127. }
  128. catch (Exception ex)
  129. {
  130. return null;
  131. }
  132. //finally
  133. //{
  134. // Close();
  135. //}
  136. }
  137. #endregion
  138. #region ExecuteDataTable
  139. public override System.Data.DataTable ExecuteDataTable(string commandText, System.Data.CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords)
  140. {
  141. try
  142. {
  143. this.Open();
  144. OleDbDataAdapter da = new OleDbDataAdapter();
  145. OleDbCommand cmd = new OleDbCommand();
  146. cmd.Connection = this.OleDbConnection;
  147. cmd.CommandText = commandText;
  148. if (trans != null)
  149. {
  150. cmd.Transaction = trans;
  151. }
  152. if (Parameters != null)
  153. {
  154. foreach (QueryParameter p in Parameters)
  155. {
  156. cmd.Parameters.Add(this.ToOleDbParameter(p));
  157. }
  158. }
  159. da.SelectCommand = cmd;
  160. DataTable dt = new DataTable();
  161. da.Fill(startRecord, maxRecords, dt);
  162. //foreach (OleDbParameter p in da.SelectCommand.Parameters)
  163. //{
  164. // Parameters[p.ParameterName] = ToQueryParameter(p);
  165. //}
  166. dt.TableName = tableName;
  167. return dt;
  168. }
  169. catch (Exception ex)
  170. {
  171. return null;
  172. }
  173. finally
  174. {
  175. Close();
  176. }
  177. }
  178. #endregion
  179. #region ExecuteDataSet
  180. /// <summary>
  181. /// 返回DataSet数据集
  182. /// </summary>
  183. /// <param name="commandText"></param>
  184. /// <param name="commandType"></param>
  185. /// <param name="Parameters"></param>
  186. /// <param name="tableName"></param>
  187. /// <param name="startRecord"></param>
  188. /// <param name="maxRecords"></param>
  189. /// <returns></returns>
  190. public override DataSet ExecuteDataSet(string commandText, CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords)
  191. {
  192. try
  193. {
  194. DataSet ds = new DataSet();
  195. OleDbDataAdapter sda = new OleDbDataAdapter();
  196. OleDbCommand cmd = this.OleDbConnection.CreateCommand();
  197. cmd.CommandText = commandText;
  198. cmd.CommandType = commandType;
  199. cmd.CommandTimeout = 60;
  200. if (trans != null)
  201. {
  202. cmd.Transaction = trans;
  203. }
  204. Open();
  205. foreach (QueryParameter q in Parameters)
  206. {
  207. cmd.Parameters.Add(ToOleDbParameter(q));
  208. }
  209. sda.SelectCommand = cmd;
  210. sda.Fill(ds, startRecord, maxRecords, tableName);
  211. //foreach (SqlParameter p in sda.SelectCommand.Parameters)
  212. //{
  213. // Parameters[p.ParameterName] = ToQueryParameter(p);
  214. //}
  215. return ds;
  216. }
  217. finally
  218. {
  219. Close();
  220. }
  221. }
  222. #endregion
  223. #region object ExecuteScalar
  224. /// <summary>
  225. ///
  226. /// </summary>
  227. /// <param name="commandText"></param>
  228. /// <param name="commandType"></param>
  229. /// <param name="parameters"></param>
  230. /// <returns></returns>
  231. public override object ExecuteScalar(string commandText, CommandType commandType, QueryParameterCollection parameters)
  232. {
  233. try
  234. {
  235. if (IsClosed)
  236. {
  237. Open();
  238. }
  239. OleDbCommand cmd = this.OleDbConnection.CreateCommand();
  240. cmd.CommandText = commandText;
  241. cmd.CommandType = commandType;
  242. if (trans != null)
  243. {
  244. cmd.Transaction = trans;
  245. }
  246. if (!object.Equals(parameters, null))
  247. {
  248. foreach (QueryParameter p in parameters)
  249. {
  250. cmd.Parameters.Add(ToOleDbParameter(p));
  251. }
  252. }
  253. object obj = cmd.ExecuteScalar();
  254. //if (!object.Equals(parameters, null))
  255. //{
  256. // parameters.Clear();
  257. // foreach (OleDbParameter p in cmd.Parameters)
  258. // {
  259. // parameters[p.ParameterName] = ToQueryParameter(p);
  260. // }
  261. //}
  262. return obj;
  263. }
  264. catch (Exception ex)
  265. {
  266. return null;
  267. }
  268. finally
  269. {
  270. Close();
  271. }
  272. }
  273. #endregion
  274. #endregion
  275. #region DataAccess 成员
  276. /// <summary>
  277. ///
  278. /// </summary>
  279. public override string ConnectionString
  280. {
  281. get
  282. {
  283. if (this.OleDbConnection.IsNull())
  284. return "";
  285. else
  286. return this.OleDbConnection.ConnectionString;
  287. }
  288. set
  289. {
  290. this.OleDbConnection.ConnectionString = value;
  291. }
  292. }
  293. public override DatabaseType DatabaseType
  294. {
  295. get { return DatabaseType.OleDb; }
  296. }
  297. public override DbTransaction Trans
  298. {
  299. get
  300. {
  301. if (this.trans != null)
  302. return trans;
  303. else
  304. return null;
  305. }
  306. }
  307. /// <summary>
  308. ///
  309. /// </summary>
  310. public override bool IsClosed
  311. {
  312. get
  313. {
  314. if (this.OleDbConnection.IsNull())
  315. {
  316. return true;
  317. }
  318. if (this.OleDbConnection.State == ConnectionState.Closed)
  319. {
  320. return true;
  321. }
  322. else
  323. {
  324. return false;
  325. }
  326. }
  327. }
  328. /// <summary>
  329. /// 数据库连接是否不可用
  330. /// </summary>
  331. public override bool IsUnEnable
  332. {
  333. get
  334. {
  335. if (this.OleDbConnection == null)
  336. {
  337. return true;
  338. }
  339. else
  340. {
  341. if (this.OleDbConnection.ConnectionString.IsEmpty())
  342. {
  343. return true;
  344. }
  345. else
  346. {
  347. return false;
  348. }
  349. }
  350. }
  351. }
  352. /// <summary>
  353. /// 打开数据库连接
  354. /// </summary>
  355. public override void Open()
  356. {
  357. //if (this.OleDbConnection.State == ConnectionState.Closed)
  358. if (OleDbConnection.ConnectionString == null || OleDbConnection.ConnectionString == "")
  359. {
  360. da = DataAccessFactory.GetWriteDataDefault;
  361. this.OleDbConnection = new OleDbConnection(da.ConnectionString);
  362. }
  363. if (this.OleDbConnection.State != ConnectionState.Open)
  364. {
  365. this.OleDbConnection.Open();
  366. }
  367. }
  368. /// <summary>
  369. /// 关闭数据库连接之后释放资源
  370. /// </summary>
  371. public override void Close()
  372. {
  373. if (this.OleDbConnection.State != ConnectionState.Closed)
  374. {
  375. this.OleDbConnection.Close();
  376. this.OleDbConnection.Dispose();
  377. }
  378. }
  379. /// <summary>
  380. /// 释放资源
  381. /// </summary>
  382. public override void Dispose()
  383. {
  384. if (this.OleDbConnection != null)
  385. {
  386. this.OleDbConnection.Dispose();
  387. }
  388. if (this.trans != null)
  389. {
  390. this.trans.Dispose();
  391. }
  392. }
  393. /// <summary>
  394. /// 开始事务
  395. /// </summary>
  396. public override void BeginTransaction()
  397. {
  398. Open();
  399. if (trans == null)
  400. trans = this.OleDbConnection.BeginTransaction();
  401. }
  402. /// <summary>
  403. /// 提交事务
  404. /// </summary>
  405. public override void Commit()
  406. {
  407. try
  408. {
  409. if (null != this.trans)
  410. {
  411. this.trans.Commit();
  412. this.trans.Dispose();
  413. trans = null;
  414. }
  415. }
  416. finally
  417. {
  418. if (this.OleDbConnection.State != ConnectionState.Closed)
  419. {
  420. this.OleDbConnection.Close();
  421. this.OleDbConnection.Dispose();
  422. }
  423. }
  424. }
  425. /// <summary>
  426. /// 回滚事务
  427. /// </summary>
  428. public override void RollBack()
  429. {
  430. try
  431. {
  432. if (trans != null)
  433. {
  434. this.trans.Rollback();
  435. this.trans.Dispose();
  436. trans = null;
  437. }
  438. }
  439. finally
  440. {
  441. //this.Close();
  442. if (this.OleDbConnection.State != ConnectionState.Closed)
  443. {
  444. this.OleDbConnection.Close();
  445. this.OleDbConnection.Dispose();
  446. }
  447. }
  448. }
  449. #endregion
  450. #region private method
  451. /// <summary>
  452. /// 将QueryParameter转换成OleDbParameter
  453. /// </summary>
  454. /// <param name="parameter">要转换的QueryParamter</param>
  455. /// <returns>返回OleDbParameter</returns>
  456. private OleDbParameter ToOleDbParameter(QueryParameter parameter)
  457. {
  458. OleDbParameter oleDbParameter = new OleDbParameter();
  459. oleDbParameter.ParameterName = parameter.ParameterName;
  460. oleDbParameter.IsNullable = parameter.IsNullable;
  461. //oleDbParameter.DbType = parameter.DbType;
  462. oleDbParameter.Direction = parameter.Direction;
  463. oleDbParameter.Precision = parameter.Precision;
  464. oleDbParameter.Scale = parameter.Scale;
  465. oleDbParameter.Size = parameter.Size;
  466. oleDbParameter.SourceColumn = parameter.SourceColumn;
  467. oleDbParameter.SourceVersion = parameter.SourceVersion;
  468. oleDbParameter.Value = parameter.Value;
  469. return oleDbParameter;
  470. }
  471. private QueryParameter ToQueryParameter(OleDbParameter parameter)
  472. {
  473. QueryParameter queryParameter = new QueryParameter();
  474. queryParameter.DbType = parameter.DbType;
  475. queryParameter.Direction = parameter.Direction;
  476. queryParameter.IsNullable = parameter.IsNullable;
  477. queryParameter.ParameterName = parameter.ParameterName;
  478. queryParameter.Precision = parameter.Precision;
  479. queryParameter.Scale = parameter.Scale;
  480. queryParameter.Size = parameter.Size;
  481. queryParameter.SourceColumn = parameter.SourceColumn;
  482. queryParameter.SourceVersion = parameter.SourceVersion;
  483. queryParameter.Value = parameter.Value;
  484. return queryParameter;
  485. }
  486. #endregion
  487. public override bool ValidateSQL(string sql)
  488. {
  489. throw new NotImplementedException();
  490. }
  491. public override DataView ExecuteDataView(string commandText, CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords)
  492. {
  493. throw new NotImplementedException();
  494. }
  495. public override DbDataReader ExecuteReader(string cmdText, DbParam[] parameters, CommandType cmdType)
  496. {
  497. throw new NotImplementedException();
  498. }
  499. public override int ExecuteNonQuery(string commandText, DbParam[] parameters, CommandType commandType)
  500. {
  501. throw new NotImplementedException();
  502. }
  503. public override object ExecuteScalar(string commandText, DbParam[] parameters, CommandType commandType)
  504. {
  505. throw new NotImplementedException();
  506. }
  507. }
  508. }