OracleHelper中,有一个用存储过程实现的Insert方法。

然后我把执行存储过程的方法 封装成了可以执行任何存储过程,参数是 存储过程名称 以及存错过程中的传入、传出参数

  1. using Oracle.DataAccess.Client;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9.  
  10. namespace DIDAO.DAL
  11. {
  12. public class OracleHelper
  13. {
  14. //链接字符串
  15. private static readonly string connStr = ConfigurationManager.ConnectionStrings["dbconnStr"].ConnectionString;
  16.  
  17. /// <summary>
  18. /// 创建链接
  19. /// </summary>
  20. /// <returns>链接</returns>
  21. public static OracleConnection CreateConnection()
  22. {
  23. OracleConnection conn = new OracleConnection(connStr);
  24. conn.Open();
  25. return conn;
  26. }
  27.  
  28. /// <summary>
  29. /// 使用亦有链接的 非查询
  30. /// </summary>
  31. /// <param name="conn">链接</param>
  32. /// <param name="sql">sql文本</param>
  33. /// <param name="parameters">sql参数</param>
  34. /// <returns>受影响行数</returns>
  35. public static int ExecuteNonQuery(OracleConnection conn,string sql,params OracleParameter[] parameters)
  36. {
  37. using(OracleCommand cmd=new OracleCommand(sql,conn))
  38. {
  39. cmd.Parameters.AddRange(parameters);
  40. return cmd.ExecuteNonQuery();
  41. }
  42. }
  43.  
  44. /// <summary>
  45. /// 自己创建链接的 非查询
  46. /// </summary>
  47. /// <param name="sql">sql文本</param>
  48. /// <param name="parameters">sql参数</param>
  49. /// <returns>受影响行数</returns>
  50. public static int ExecuteNonQuery(string sql, params OracleParameter[] parameters)
  51. {
  52. using (OracleConnection conn = CreateConnection())
  53. {
  54. return ExecuteNonQuery(conn, sql, parameters);
  55. }
  56. }
  57.  
  58. /// <summary>
  59. /// 使用已有链接的 带存储过程的Insert非查询,直接写存储过程参数
  60. /// </summary>
  61. /// <param name="conn">已有链接</param>
  62. /// <param name="proName">存储过程名称</param>
  63. /// <param name="strInsertSQL">执行插入的sql语句,或者其他操作sql语句</param>
  64. /// <param name="seqName">序列的名称</param>
  65. /// <returns>当前序列号,即ID</returns>
  66. public static object ExecuteNonQueryWithProduce(OracleConnection conn, string proName, string strInsertSQL, string seqName)
  67. {
  68. using (OracleCommand cmd = new OracleCommand(proName, conn)) //命令中执行的不在是sql,而是存储过程
  69. {
  70. try
  71. {
  72. cmd.CommandType = CommandType.StoredProcedure; //标记该命令的类型不是sql,而是存储过程
  73. //存储过程中有参数名称,以及设置对应参数的值
  74. cmd.Parameters.Add(new OracleParameter("strInsertSQL", OracleDbType.Varchar2) { Value = strInsertSQL }); ////存储过程中的参入参数 strInsertSQL
  75. cmd.Parameters.Add(new OracleParameter("seqName", OracleDbType.Varchar2) { Value = seqName }); // //存储过程中的传入参数 seqName
  76. cmd.Parameters.Add(new OracleParameter("ID", OracleDbType.Int64) { Direction = ParameterDirection.Output }); //存储过程中的传出参数ID,只需要声明
  77. //cmd.Parameters.AddRange(parameters);
  78. cmd.ExecuteNonQuery();
  79. string newId = cmd.Parameters["ID"].Value.ToString(); //获得传出参数的ID的值
  80. return newId;
  81. }
  82. catch(Exception ex)
  83. {
  84. throw new Exception(ex.ToString());
  85. }
  86. }
  87. }
  88.  
  89. /// <summary>
  90. /// 自己创建链接的 带存储过程的Insert非查询,直接写存储过程参数
  91. /// </summary>
  92. /// <param name="proName">存储过程名称</param>
  93. /// <param name="strInsertSQL">执行插入的sql语句,或者其他操作sql语句</param>
  94. /// <param name="seqName">序列的名称</param>
  95. /// <returns>当前序列号,即ID</returns>
  96. public static object ExecuteNonQueryWithProduce(string proName, string strInsertSQL, string seqName)
  97. {
  98. using (OracleConnection conn = CreateConnection())
  99. {
  100. return ExecuteNonQueryWithProduce(conn, proName, strInsertSQL, seqName);
  101. }
  102. }
  103.  
  104. /// <summary>
  105. /// 使用已有链接的 带存储过程的Insert非查询,传存储过程参数
  106. /// </summary>
  107. /// <param name="conn">已有链接</param>
  108. /// <param name="proName">存储过程名称</param>
  109. /// <param name="parameters">存储过程中的传入、传出参数 数组</param>
  110. /// <returns>当前序列号,即ID</returns>
  111. public static object ExecuteNonQueryWithProduce(OracleConnection conn, string proName, params OracleParameter[] parameters)
  112. {
  113. using (OracleCommand cmd = new OracleCommand(proName, conn)) //命令中执行的不在是sql,而是存储过程
  114. {
  115. try
  116. {
  117. cmd.CommandType = CommandType.StoredProcedure; //标记该命令的类型不是sql,而是存储过程
  118. ////存储过程中有参数名称,以及设置对应参数的值
  119. //cmd.Parameters.Add(new OracleParameter("strInsertSQL", OracleDbType.Varchar2) { Value = strInsertSQL }); ////存储过程中的参入参数 strInsertSQL
  120. //cmd.Parameters.Add(new OracleParameter("seqName", OracleDbType.Varchar2) { Value = seqName }); // //存储过程中的传入参数 seqName
  121. //cmd.Parameters.Add(new OracleParameter("ID", OracleDbType.Int32) { Direction = ParameterDirection.Output }); //存储过程中的传出参数ID,只需要声明
  122. cmd.Parameters.AddRange(parameters); //参数中包括存储过程的传入传出参数,以及子sql语句中的参数 --------------****-----------------
  123. int i = cmd.ExecuteNonQuery(); //直接返回执行插入之后,存储过程传出的变量值
  124. string newId = cmd.Parameters["ID"].Value.ToString(); //获得传出参数的ID的值
  125. return newId;
  126. }
  127. catch (Exception ex)
  128. {
  129. throw new Exception(ex.ToString());
  130. }
  131. }
  132. }
  133.  
  134. /// <summary>
  135. /// 自己创建链接的 带存储过程的Insert非查询,传存储过程参数
  136. /// </summary>
  137. /// <param name="proName">存储过程名称</param>
  138. /// <param name="parameters">存储过程中的传入、传出参数 数组</param>
  139. /// <returns>当前序列号,即ID</returns>
  140. public static object ExecuteNonQueryWithProduce(string proName,params OracleParameter[] parameters)
  141. {
  142. using (OracleConnection conn = CreateConnection())
  143. {
  144. return ExecuteNonQueryWithProduce(conn, proName, parameters);
  145. }
  146. }
  147.  
  148. /// <summary>
  149. /// 使用已有链接的 单查询
  150. /// </summary>
  151. /// <param name="conn">链接</param>
  152. /// <param name="sql">sql文本</param>
  153. /// <param name="parameters">sql参数</param>
  154. /// <returns>查询到的一条结果</returns>
  155. public static object ExecuteScalar(OracleConnection conn,string sql,params OracleParameter[] parameters)
  156. {
  157. using(OracleCommand cmd=new OracleCommand(sql,conn))
  158. {
  159. cmd.Parameters.AddRange(parameters);
  160. return cmd.ExecuteScalar();
  161. }
  162. }
  163.  
  164. /// <summary>
  165. /// 自己创建链接的 单查询
  166. /// </summary>
  167. /// <param name="sql">sql文本</param>
  168. /// <param name="parameters">sql参数</param>
  169. /// <returns>查询到的一条结果</returns>
  170. public static object ExecuteScalar(string sql,params OracleParameter[] parameters)
  171. {
  172. using(OracleConnection conn=CreateConnection())
  173. {
  174. return ExecuteScalar(conn, sql, parameters);
  175. }
  176. }
  177.  
  178. /// <summary>
  179. /// 使用已有链接的 reader查询
  180. /// </summary>
  181. /// <param name="conn">链接</param>
  182. /// <param name="sql">sql文本</param>
  183. /// <param name="parameters">sql参数</param>
  184. /// <returns>查询到的结果集table</returns>
  185. public static DataTable ExecuteReader(OracleConnection conn,string sql,params OracleParameter[] parameters)
  186. {
  187. DataTable table = new DataTable();
  188. using(OracleCommand cmd=new OracleCommand(sql,conn))
  189. {
  190. cmd.Parameters.AddRange(parameters);
  191. using (OracleDataReader reader = cmd.ExecuteReader())
  192. {
  193. table.Load(reader);
  194. }
  195. }
  196. return table;
  197. }
  198.  
  199. /// <summary>
  200. /// 自己创建链接的 reader查询
  201. /// </summary>
  202. /// <param name="sql">sql文本</param>
  203. /// <param name="parameters">sql参数</param>
  204. /// <returns>查询到的结果集table</returns>
  205. public static DataTable ExecuteReader(string sql,params OracleParameter[] parameters)
  206. {
  207. using(OracleConnection conn=CreateConnection())
  208. {
  209. return ExecuteReader(conn, sql, parameters);
  210. }
  211. }
  212.  
  213. /// <summary>
  214. /// 使用已有链接的 stream查询
  215. /// </summary>
  216. /// <param name="conn">链接</param>
  217. /// <param name="sql">sql文本</param>
  218. /// <param name="parameters">sql参数</param>
  219. /// <returns>查询到的结果流stream</returns>
  220. public static System.IO.Stream ExecuteStream(OracleConnection conn,string sql,params OracleParameter[] parameters)
  221. {
  222. using(OracleCommand cmd=new OracleCommand(sql,conn))
  223. {
  224. cmd.Parameters.AddRange(parameters);
  225. using (System.IO.Stream stream = cmd.ExecuteStream())
  226. {
  227. return stream;
  228. }
  229. }
  230. }
  231.  
  232. /// <summary>
  233. /// 自己创建链接的stream查询
  234. /// </summary>
  235. /// <param name="sql">sql文本</param>
  236. /// <param name="parameters">sql参数</param>
  237. /// <returns>查询到的结果流stream</returns>
  238. public static System.IO.Stream ExecuteStream(string sql, params OracleParameter[] parameters)
  239. {
  240. using(OracleConnection conn=CreateConnection())
  241. {
  242. return ExecuteStream(conn, sql, parameters);
  243. }
  244. }
  245. }
  246. }

OracleHelper(for produce)

OracleHelper(for produce)的更多相关文章

  1. 获得Oracle中刚插入的数据的ID(for produce)

    在sql sever中实现插入数据的自动增长是很容易的,但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而 且不会出现读错的情况,就更显得困难了,为了解 ...

  2. 15个最佳的代码评审(Code Review)工具

    代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...

  3. Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)

    原帖:http://www.cnblogs.com/nayitian/p/3231734.html wmsys.wm_concat Definition: The Oracle PL/SQL WM_C ...

  4. Spring 4 官方文档学习(十二)View技术

    关键词:view technology.template.template engine.markup.内容较多,按需查用即可. 介绍 Thymeleaf Groovy Markup Template ...

  5. iOS 10.0 更新点(开发者视角)

    html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padding: 0 ...

  6. Java设计模式-工厂方法模式(Factory Method)

    工厂方法模式(Factory Method) 工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建.在以下的三种模式中,第一种如果传入的字符串有误,不能正确创 ...

  7. 优先队列(Priority Queue)

    优先队列(Priority Queue) A priority queue must at least support the following operations: insert_with_pr ...

  8. H264学习第一篇(编码结构分析)

    学习H264之前,最好阅读一下维基百科中有关H264的相关介绍,里面包含了其的发展历程.主要特点.参考文献.参考网站等. 研究H264的主要文件包括两份参考手册(一份是语法结构参考手册,一份是JM开发 ...

  9. WebApi学习总结系列第四篇(路由系统)

    由于工作的原因,断断续续终于看完了<ASP.NET Web API 2 框架揭秘>第二章关于WebApi的路由系统的知识. 路由系统是请求消息进入Asp.net WebApi的第一道屏障, ...

随机推荐

  1. HDU4670 Cube number on a tree 树分治

    人生的第一道树分治,要是早点学我南京赛就不用那么挫了,树分治的思路其实很简单,就是对子树找到一个重心(Centroid),实现重心分解,然后递归的解决分开后的树的子问题,关键是合并,当要合并跨过重心的 ...

  2. 【mysql的编程专题】触发器

    类似tp里面的数据模型回调接口,在数据表增删改的前或后触发执行其他的预订的sql; 一个触发器要具备4要素: 1.监视地点 -- 要执行触发器的表 2.监视事件 -- 由什么DML事件来牵引 3.触发 ...

  3. PowerDesigner概念模型的Notation设置

    原文:PowerDesigner概念模型的Notation设置 在进行数据库设计模型时,分为概念模型设计和物理模型设计两种,概念模型主要是反映真是 世界中的业务关系,也就是我们常用的实体关系图.物理模 ...

  4. C++:运算符重载函数之"++"、"--"、"[ ]"、"=="的应用

    5.2.5 "++"和"--"的重载 对于前缀方式++ob,可以用运算符函数重载为: ob.operator++() //成员函数重载 或 operator++ ...

  5. Android 给listview设置分割线与边界的距离

    ListView可通过配置 android:dividerline android:dividerHeight 来实现分割listview中item的效果,如图: 如果想跟上图一样实现这种有设计的分割 ...

  6. 从Uboot到Linux技术内幕

    1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware) ...

  7. 【Latex】如何在Latex中插入伪代码 —— clrscode3e

    1. 简介clrscode3e是<算法导论(第三版)>使用的伪代码的宏包,clrs其实表示的是Cormen.Leiserson.Rivest和Stein.它有个更老的版本clrscode, ...

  8. n人比赛,可轮空,比赛轮数和场数

    #include<stdio.h> int chang(int x,int s){ ) return s; ) ; !=){ s+=(x-)/; )/,s); } else{ s+=x/; ...

  9. TUXEDO错误解决方案

    错误1: root@tfjus:/opt/tuxedo/simpapp# buildclient -f simpcl.c -o simpcl simpcl.c: In function 'main': ...

  10. SecureCRT访问开发板linux系统

    前言: 最近在用OK6410开发板跑linux系统,经常在终端上敲一些指令,无奈开发板屏幕太小用起来非常不方便,所以使用终端一款能运行在windows上的软件与开发板连接,直接在电脑上操作开发板了,这 ...