周口郸城医院 DanChengCallCenter_API

OracleHelper.cs 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. using System;
  2. using System.Configuration;
  3. using System.Data;
  4. using System.Collections;
  5. using System.Data.OracleClient;
  6. namespace CallCenterApi.DB
  7. {
  8. /// <summary>
  9. ///Oracle数据库操作帮助类
  10. /// </summary>
  11. public abstract class OracleHelper
  12. {
  13. //从配置文件中读取配置好的连接字符串
  14. public static readonly string connectionString = ConfigurationManager.ConnectionStrings["oracleconn"].ConnectionString;
  15. //为缓存的参数创建一个hashtable
  16. private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
  17. /// <summary>
  18. /// 增删改操作使用此方法
  19. /// </summary>
  20. /// <param name="connString">连接字符串</param>
  21. /// <param name="cmdType">命令类型(sql语句或者存储过程)</param>
  22. /// <param name="cmdText">要执行的sql语句或者存储过程名称</param>
  23. /// <param name="commandParameters">执行所需的一些参数</param>
  24. /// <returns>返回受影响的行数</returns>
  25. public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
  26. {
  27. // 创建一个OracleCommand
  28. OracleCommand cmd = new OracleCommand();
  29. //创建一个OracleConnection
  30. using (OracleConnection connection = new OracleConnection(connectionString))
  31. {
  32. //调用静态方法PrepareCommand完成赋值操作
  33. PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
  34. //执行命令返回
  35. int val = cmd.ExecuteNonQuery();
  36. //清空参数
  37. cmd.Parameters.Clear();
  38. return val;
  39. }
  40. }
  41. /// <summary>
  42. /// 增删改操作使用此方法(需要一个存在的事务参数)
  43. /// </summary>
  44. /// <param name="trans">一个存在的事务</param>
  45. /// <param name="commandType">命令类型(sql或者存储过程)</param>
  46. /// <param name="commandText">sql语句或者存储过程名称</param>
  47. /// <param name="commandParameters">命令所需参数数组</param>
  48. /// <returns>返回受影响的行数</returns>
  49. public static int ExecuteNonQuery(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
  50. {
  51. // 创建一个OracleCommand
  52. OracleCommand cmd = new OracleCommand();
  53. //调用静态方法PrepareCommand完成赋值操作
  54. PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
  55. //执行命令返回
  56. int val = cmd.ExecuteNonQuery();
  57. //清空参数
  58. cmd.Parameters.Clear();
  59. return val;
  60. }
  61. /// <summary>
  62. /// 增删改操作使用此方法(需要一个存在的连接)
  63. /// </summary>
  64. /// <param name="conn">一个存在的OracleConnection参数</param>
  65. /// <param name="commandType">命令类型(sql或者存储过程)</param>
  66. /// <param name="commandText">sql语句或者存储过程名称</param>
  67. /// <param name="commandParameters">命令所需参数数组</param>
  68. /// <returns>返回受影响的行数</returns>
  69. public static int ExecuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
  70. {
  71. // 创建一个OracleCommand
  72. OracleCommand cmd = new OracleCommand();
  73. //调用静态方法PrepareCommand完成赋值操作
  74. PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
  75. //执行命令返回
  76. int val = cmd.ExecuteNonQuery();
  77. //清空参数
  78. cmd.Parameters.Clear();
  79. return val;
  80. }
  81. /// <summary>
  82. /// 查询返回一个结果集
  83. /// </summary>
  84. /// <param name="connString">连接字符串</param>
  85. //// <param name="commandType">命令类型(sql或者存储过程)</param>
  86. /// <param name="commandText">sql语句或者存储过程名称</param>
  87. /// <param name="commandParameters">命令所需参数数组</param>
  88. /// <returns></returns>
  89. public static OracleDataReader ExecuteReader(CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
  90. {
  91. // 创建一个OracleCommand
  92. OracleCommand cmd = new OracleCommand();
  93. // 创建一个OracleConnection
  94. OracleConnection conn = new OracleConnection(connectionString);
  95. try
  96. {
  97. //调用静态方法PrepareCommand完成赋值操作
  98. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  99. //执行查询
  100. OracleDataReader odr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  101. //清空参数
  102. cmd.Parameters.Clear();
  103. return odr;
  104. }
  105. catch
  106. {
  107. //如果发生异常,关闭连接,并且向上抛出异常
  108. conn.Close();
  109. throw;
  110. }
  111. }
  112. /// <summary>
  113. /// 执行语句返回的是单行单列的结果
  114. /// </summary>
  115. /// <param name="connectionString">连接字符串</param>
  116. /// <param name="commandType">命令类型(sql或者存储过程)</param>
  117. /// <param name="commandText">sql语句或者存储过程名称</param>
  118. /// <param name="commandParameters">命令所需参数数组</param>
  119. /// <returns>返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换</returns>
  120. public static object ExecuteScalar(CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
  121. {
  122. // 创建一个OracleCommand
  123. OracleCommand cmd = new OracleCommand();
  124. // 创建一个OracleConnection
  125. using (OracleConnection conn = new OracleConnection(connectionString))
  126. {
  127. //调用静态方法PrepareCommand完成赋值操作
  128. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  129. //执行查询
  130. object val = cmd.ExecuteScalar();
  131. //清空参数
  132. cmd.Parameters.Clear();
  133. return val;
  134. }
  135. }
  136. /// <summary>
  137. /// 执行语句返回的是单行单列的结果(有指定的事务参数)
  138. /// </summary>
  139. /// <param name="transaction">一个存在的事务参数</param>
  140. /// <param name="commandType">命令类型(sql或者存储过程)</param>
  141. /// <param name="commandText">sql语句或者存储过程名称</param>
  142. /// <param name="commandParameters">命令所需参数数组</param>
  143. /// <returns>返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换</returns>
  144. public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
  145. {
  146. //如果传入的事务是空值,抛出异常
  147. if (transaction == null)
  148. throw new ArgumentNullException("transaction");
  149. //如果传入的事务无连接,抛出异常(无连接,说明传入的事务参数是已经提交过或者回滚了的事务)
  150. if (transaction != null && transaction.Connection == null)
  151. throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
  152. // 创建一个OracleCommand
  153. OracleCommand cmd = new OracleCommand();
  154. //调用静态方法PrepareCommand完成赋值操作
  155. PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
  156. //执行查询
  157. object retval = cmd.ExecuteScalar();
  158. //清空参数
  159. cmd.Parameters.Clear();
  160. return retval;
  161. }
  162. /// <summary>
  163. /// 执行语句返回的是单行单列的结果(有指定的连接参数)
  164. /// </summary>
  165. /// <param name="conn">一个存在的连接参数</param>
  166. /// <param name="commandType">命令类型(sql或者存储过程)</param>
  167. /// <param name="commandText">sql语句或者存储过程名称</param>
  168. /// <param name="commandParameters">命令所需参数数组</param>
  169. /// <returns>返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换</returns>
  170. public static object ExecuteScalar(OracleConnection conn, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
  171. {
  172. // 创建一个OracleCommand
  173. OracleCommand cmd = new OracleCommand();
  174. //调用静态方法PrepareCommand完成赋值操作
  175. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  176. //执行查询
  177. object val = cmd.ExecuteScalar();
  178. //清空参数
  179. cmd.Parameters.Clear();
  180. return val;
  181. }
  182. /// <summary>
  183. /// Add a set of parameters to the cached
  184. /// </summary>
  185. /// <param name="cacheKey">Key value to look up the parameters</param>
  186. /// <param name="commandParameters">Actual parameters to cached</param>
  187. public static void CacheParameters(string cacheKey, params OracleParameter[] commandParameters)
  188. {
  189. parmCache[cacheKey] = commandParameters;
  190. }
  191. /// <summary>
  192. /// 从缓存中获取参数
  193. /// </summary>
  194. /// <param name="cacheKey">look up 中的cachekey</param>
  195. /// <returns></returns>
  196. public static OracleParameter[] GetCachedParameters(string cacheKey)
  197. {
  198. OracleParameter[] cachedParms = (OracleParameter[])parmCache[cacheKey];
  199. if (cachedParms == null)
  200. return null;
  201. // 如果缓存中有此参数
  202. OracleParameter[] clonedParms = new OracleParameter[cachedParms.Length];
  203. // 返回参数的copy
  204. for (int i = 0, j = cachedParms.Length; i < j; i++)
  205. clonedParms[i] = (OracleParameter)((ICloneable)cachedParms[i]).Clone();
  206. return clonedParms;
  207. }
  208. /// <summary>
  209. /// 一个静态的预处理函数
  210. /// </summary>
  211. /// <param name="cmd">存在的OracleCommand对象</param>
  212. /// <param name="conn">存在的OracleConnection对象</param>
  213. /// <param name="trans">存在的OracleTransaction对象</param>
  214. /// <param name="cmdType">命令类型(sql或者存在过程)</param>
  215. /// <param name="cmdText">sql语句或者存储过程名称</param>
  216. /// <param name="commandParameters">Parameters for the command</param>
  217. private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType cmdType, string cmdText, OracleParameter[] commandParameters)
  218. {
  219. //如果连接未打开,先打开连接
  220. if (conn.State != ConnectionState.Open)
  221. conn.Open();
  222. //未要执行的命令设置参数
  223. cmd.Connection = conn;
  224. cmd.CommandText = cmdText;
  225. cmd.CommandType = cmdType;
  226. //如果传入了事务,需要将命令绑定到指定的事务上去
  227. if (trans != null)
  228. cmd.Transaction = trans;
  229. //将传入的参数信息赋值给命令参数
  230. if (commandParameters != null)
  231. {
  232. cmd.Parameters.AddRange(commandParameters);
  233. }
  234. }
  235. }
  236. }