OracleDataAccess.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  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.OracleClient;
  7. using System.Xml;
  8. using System.Configuration;
  9. using Ant.Common;
  10. namespace Ant.Data
  11. {
  12. /// <summary>
  13. /// Oracle数据库访问类
  14. /// </summary>
  15. public sealed class OracleDataAccess : BaseDataAccess
  16. {
  17. private OracleConnection OracleConnection;
  18. private OracleTransaction trans;
  19. private DataAccess da;
  20. #region DataAccess 成员
  21. /// <summary>
  22. /// 构造函数
  23. /// </summary>
  24. public OracleDataAccess()
  25. {
  26. this.OracleConnection = new OracleConnection();
  27. }
  28. /// <summary>
  29. /// 构造函数
  30. /// </summary>
  31. /// <param name="connString">连接数据库字符串</param>
  32. public OracleDataAccess(string connString)
  33. {
  34. this.OracleConnection = new OracleConnection(connString);
  35. }
  36. /// <summary>
  37. ///
  38. /// </summary>
  39. public bool ConvertToUppercase { get; set; }
  40. /// <summary>
  41. /// 数据库连接字符串
  42. /// </summary>
  43. public override string ConnectionString
  44. {
  45. get
  46. {
  47. if (this.OracleConnection.IsNull())
  48. return "";
  49. else
  50. return this.OracleConnection.ConnectionString;
  51. }
  52. set
  53. {
  54. this.OracleConnection.ConnectionString = value;
  55. }
  56. }
  57. public override DatabaseType DatabaseType
  58. {
  59. get { return DatabaseType.Oracle; }
  60. }
  61. /// <summary>
  62. /// 获取事务的值
  63. /// </summary>
  64. public override DbTransaction Trans
  65. {
  66. get
  67. {
  68. if (this.trans != null)
  69. return trans;
  70. else
  71. return null;
  72. }
  73. }
  74. /// <summary>
  75. /// 获取数据库是否关闭
  76. /// </summary>
  77. public override bool IsClosed
  78. {
  79. get
  80. {
  81. if (this.OracleConnection.IsNull())
  82. return true;
  83. if (this.OracleConnection.State == ConnectionState.Closed)
  84. {
  85. return true;
  86. }
  87. else
  88. {
  89. return false;
  90. }
  91. }
  92. }
  93. /// <summary>
  94. /// 数据库连接是否不可用
  95. /// </summary>
  96. public override bool IsUnEnable
  97. {
  98. get
  99. {
  100. if (this.OracleConnection == null)
  101. {
  102. return true;
  103. }
  104. if (this.OracleConnection.ConnectionString.IsEmpty())
  105. {
  106. return true;
  107. }
  108. else
  109. {
  110. return false;
  111. }
  112. }
  113. }
  114. /// <summary>
  115. /// 打开数据库
  116. /// </summary>
  117. public override void Open()
  118. {
  119. if (OracleConnection.ConnectionString == null || OracleConnection.ConnectionString == "")
  120. {
  121. da = DataAccessFactory.GetWriteDataDefault;
  122. this.OracleConnection = new OracleConnection(da.ConnectionString);
  123. }
  124. if (this.OracleConnection.State == ConnectionState.Closed)
  125. {
  126. this.OracleConnection.Open();
  127. }
  128. }
  129. /// <summary>
  130. /// 关闭数据库
  131. /// </summary>
  132. public override void Close()
  133. {
  134. if (this.OracleConnection.State != ConnectionState.Closed && trans == null)
  135. {
  136. this.OracleConnection.Close();
  137. this.OracleConnection.Dispose();
  138. this.OracleConnection = null;
  139. }
  140. }
  141. /// <summary>
  142. /// 释放资源
  143. /// </summary>
  144. public override void Dispose()
  145. {
  146. if (this.OracleConnection != null)
  147. {
  148. this.OracleConnection.Dispose();
  149. this.OracleConnection = null;
  150. }
  151. if (this.trans != null)
  152. {
  153. this.trans.Dispose();
  154. this.trans = null;
  155. }
  156. }
  157. /// <summary>
  158. /// 开户数据库事务
  159. /// </summary>
  160. public override void BeginTransaction()
  161. {
  162. Open();
  163. if (trans == null)
  164. trans = this.OracleConnection.BeginTransaction();
  165. }
  166. /// <summary>
  167. /// 提交数据库事务
  168. /// </summary>
  169. public override void Commit()
  170. {
  171. try
  172. {
  173. if (null != this.trans)
  174. {
  175. this.trans.Commit();
  176. this.trans.Dispose();
  177. trans = null;
  178. }
  179. }
  180. finally
  181. {
  182. this.Close();
  183. }
  184. }
  185. /// <summary>
  186. /// 回滚数据库事务
  187. /// </summary>
  188. public override void RollBack()
  189. {
  190. try
  191. {
  192. if (trans != null)
  193. {
  194. this.trans.Rollback();
  195. this.trans.Dispose();
  196. trans = null;
  197. }
  198. }
  199. finally
  200. {
  201. this.Close();
  202. }
  203. }
  204. /// <summary>
  205. ///
  206. /// </summary>
  207. /// <param name="commandText"></param>
  208. /// <param name="commandType"></param>
  209. /// <param name="Parameters"></param>
  210. /// <returns></returns>
  211. public override int ExecuteNonQuery(string commandText, CommandType commandType, QueryParameterCollection Parameters)
  212. {
  213. try
  214. {
  215. this.Open();
  216. OracleCommand cmd = this.OracleConnection.CreateCommand();
  217. cmd.CommandText = commandText;
  218. cmd.CommandType = commandType;
  219. if (trans != null)
  220. {
  221. cmd.Transaction = trans;
  222. }
  223. if (Parameters != null)
  224. {
  225. foreach (QueryParameter p in Parameters)
  226. {
  227. cmd.Parameters.Add(ToOracleParameter(p));
  228. }
  229. }
  230. return cmd.ExecuteNonQuery();
  231. }
  232. catch (Exception ex)
  233. {
  234. return -1;
  235. }
  236. }
  237. /// <summary>
  238. ///
  239. /// </summary>
  240. /// <param name="commandText"></param>
  241. /// <param name="commandType"></param>
  242. /// <param name="Parameters"></param>
  243. /// <returns></returns>
  244. public override DbDataReader ExecuteDataReader(string commandText, CommandType commandType, QueryParameterCollection Parameters)
  245. {
  246. try
  247. {
  248. this.Open();
  249. OracleCommand cmd = this.OracleConnection.CreateCommand();
  250. cmd.CommandText = commandText;
  251. cmd.CommandType = commandType;
  252. if (trans != null)
  253. {
  254. cmd.Transaction = trans;
  255. }
  256. if (Parameters != null)
  257. {
  258. foreach (QueryParameter p in Parameters)
  259. {
  260. cmd.Parameters.Add(ToOracleParameter(p));
  261. }
  262. }
  263. return cmd.ExecuteReader();
  264. }
  265. catch (Exception ex)
  266. {
  267. return null;
  268. }
  269. }
  270. #region ExecuteDataTable
  271. /// <summary>
  272. ///
  273. /// </summary>
  274. /// <param name="commandText"></param>
  275. /// <param name="commandType"></param>
  276. /// <param name="Parameters"></param>
  277. /// <param name="tableName"></param>
  278. /// <param name="startRecord"></param>
  279. /// <param name="maxRecords"></param>
  280. /// <returns></returns>
  281. public override DataTable ExecuteDataTable(string commandText, CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords)
  282. {
  283. try
  284. {
  285. this.Open();
  286. OracleCommand cmd = this.OracleConnection.CreateCommand();
  287. cmd.CommandText = commandText;
  288. cmd.CommandType = commandType;
  289. if (trans != null)
  290. {
  291. cmd.Transaction = trans;
  292. }
  293. if (Parameters != null)
  294. {
  295. foreach (QueryParameter p in Parameters)
  296. {
  297. cmd.Parameters.Add(ToOracleParameter(p));
  298. }
  299. }
  300. OracleDataAdapter DataAdapter = new OracleDataAdapter(cmd);
  301. DataTable dt = new DataTable();
  302. DataAdapter.Fill(startRecord, maxRecords, dt);
  303. if (tableName != null)
  304. {
  305. dt.TableName = tableName;
  306. }
  307. return dt;
  308. }
  309. catch (Exception ex)
  310. {
  311. return null;
  312. }
  313. finally
  314. {
  315. this.Close();
  316. }
  317. }
  318. #endregion
  319. #region ExecuteDataSet
  320. /// <summary>
  321. /// 返回DataSet数据集
  322. /// </summary>
  323. /// <param name="commandText"></param>
  324. /// <param name="commandType"></param>
  325. /// <param name="Parameters"></param>
  326. /// <param name="tableName"></param>
  327. /// <param name="startRecord"></param>
  328. /// <param name="maxRecords"></param>
  329. /// <returns></returns>
  330. public override DataSet ExecuteDataSet(string commandText, CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords)
  331. {
  332. try
  333. {
  334. DataSet ds = new DataSet();
  335. OracleDataAdapter sda = new OracleDataAdapter();
  336. this.Open();
  337. OracleCommand cmd = this.OracleConnection.CreateCommand();
  338. cmd.CommandText = commandText;
  339. cmd.CommandType = commandType;
  340. cmd.CommandTimeout = 60;
  341. if (trans != null)
  342. {
  343. cmd.Transaction = trans;
  344. }
  345. foreach (QueryParameter q in Parameters)
  346. {
  347. cmd.Parameters.Add(ToOracleParameter(q));
  348. }
  349. sda.SelectCommand = cmd;
  350. sda.Fill(ds, startRecord, maxRecords, tableName);
  351. //foreach (SqlParameter p in sda.SelectCommand.Parameters)
  352. //{
  353. // Parameters[p.ParameterName] = ToQueryParameter(p);
  354. //}
  355. return ds;
  356. }
  357. finally
  358. {
  359. this.Close();
  360. }
  361. }
  362. #endregion
  363. #region object ExecuteScalar
  364. public override object ExecuteScalar(string commandText, CommandType commandType, QueryParameterCollection parameters)
  365. {
  366. try
  367. {
  368. this.Open();
  369. OracleCommand cmd = this.OracleConnection.CreateCommand();
  370. cmd.CommandText = commandText;
  371. cmd.CommandType = commandType;
  372. if (trans != null)
  373. {
  374. cmd.Transaction = trans;
  375. }
  376. foreach (QueryParameter p in parameters)
  377. {
  378. cmd.Parameters.Add(ToOracleParameter(p));
  379. }
  380. return cmd.ExecuteScalar();
  381. }
  382. catch (Exception ex)
  383. {
  384. return null;
  385. }
  386. finally
  387. {
  388. this.Close();
  389. }
  390. }
  391. #endregion
  392. #endregion
  393. #region private method
  394. private OracleParameter ToOracleParameter(QueryParameter parameter)
  395. {
  396. OracleParameter oracleParameter = new OracleParameter();
  397. oracleParameter.DbType = parameter.DbType;
  398. oracleParameter.Direction = parameter.Direction;
  399. oracleParameter.IsNullable = parameter.IsNullable;
  400. oracleParameter.ParameterName = parameter.ParameterName;
  401. oracleParameter.Size = parameter.Size;
  402. oracleParameter.SourceColumn = parameter.SourceColumn;
  403. oracleParameter.SourceVersion = parameter.SourceVersion;
  404. oracleParameter.Value = parameter.Value;
  405. return oracleParameter;
  406. }
  407. private QueryParameter ToQueryParameter(OracleParameter parameter)
  408. {
  409. QueryParameter queryParameter = new QueryParameter();
  410. queryParameter.DbType = parameter.DbType;
  411. queryParameter.Direction = parameter.Direction;
  412. queryParameter.IsNullable = parameter.IsNullable;
  413. queryParameter.ParameterName = parameter.ParameterName;
  414. queryParameter.Value = parameter.Value;
  415. return queryParameter;
  416. }
  417. #endregion
  418. public override bool ValidateSQL(string sql)
  419. {
  420. throw new NotImplementedException();
  421. }
  422. public override DataView ExecuteDataView(string commandText, CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords)
  423. {
  424. throw new NotImplementedException();
  425. }
  426. public override DbDataReader ExecuteReader(string cmdText, DbParam[] parameters, CommandType cmdType)
  427. {
  428. throw new NotImplementedException();
  429. }
  430. public override int ExecuteNonQuery(string commandText, DbParam[] parameters, CommandType commandType)
  431. {
  432. throw new NotImplementedException();
  433. }
  434. public override object ExecuteScalar(string commandText, DbParam[] parameters, CommandType commandType)
  435. {
  436. throw new NotImplementedException();
  437. }
  438. }
  439. }