using System;
using System.Configuration;
using System.Data;
using System.Collections;
using Oracle.DataAccess.Client;namespace OracleHelper
{/// <summary>///Oracle数据库操作帮助类/// </summary>public abstract class OracleHelper{//从配置文件中读取配置好的连接字符串public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["OraConnString1"].ConnectionString;public static readonly string ConnectionStringInventoryDistributedTransaction = ConfigurationManager.ConnectionStrings["OraConnString2"].ConnectionString;public static readonly string ConnectionStringOrderDistributedTransaction = ConfigurationManager.ConnectionStrings["OraConnString3"].ConnectionString;public static readonly string ConnectionStringProfile = ConfigurationManager.ConnectionStrings["OraProfileConnString"].ConnectionString;public static readonly string ConnectionStringMembership = ConfigurationManager.ConnectionStrings["OraMembershipConnString"].ConnectionString;//为缓存的参数创建一个hashtableprivate static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());/// <summary>/// 增删改操作使用此方法/// </summary>/// <param name="connString">连接字符串</param>/// <param name="cmdType">命令类型(sql语句或者存储过程)</param>/// <param name="cmdText">要执行的sql语句或者存储过程名称</param>/// <param name="commandParameters">执行所需的一些参数</param>/// <returns>返回受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters){// 创建一个OracleCommandOracleCommand cmd = new OracleCommand();//创建一个OracleConnectionusing (OracleConnection connection = new OracleConnection(connectionString)){//调用静态方法PrepareCommand完成赋值操作PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);//执行命令返回int val = cmd.ExecuteNonQuery();//清空参数
                cmd.Parameters.Clear();return val;}}/// <summary>/// 增删改操作使用此方法(需要一个存在的事务参数)/// </summary>/// <param name="trans">一个存在的事务</param>/// <param name="commandType">命令类型(sql或者存储过程)</param>/// <param name="commandText">sql语句或者存储过程名称</param>/// <param name="commandParameters">命令所需参数数组</param>/// <returns>返回受影响的行数</returns>public static int ExecuteNonQuery(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters){// 创建一个OracleCommandOracleCommand cmd = new OracleCommand();//调用静态方法PrepareCommand完成赋值操作
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);//执行命令返回int val = cmd.ExecuteNonQuery();//清空参数
            cmd.Parameters.Clear();return val;}/// <summary>/// 增删改操作使用此方法(需要一个存在的连接)/// </summary> /// <param name="conn">一个存在的OracleConnection参数</param>/// <param name="commandType">命令类型(sql或者存储过程)</param>/// <param name="commandText">sql语句或者存储过程名称</param>/// <param name="commandParameters">命令所需参数数组</param>/// <returns>返回受影响的行数</returns>public static int ExecuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters){// 创建一个OracleCommandOracleCommand cmd = new OracleCommand();//调用静态方法PrepareCommand完成赋值操作PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);//执行命令返回int val = cmd.ExecuteNonQuery();//清空参数
            cmd.Parameters.Clear();return val;}/// <summary>/// 查询返回一个结果集/// </summary>/// <param name="connString">连接字符串</param>//// <param name="commandType">命令类型(sql或者存储过程)</param>/// <param name="commandText">sql语句或者存储过程名称</param>/// <param name="commandParameters">命令所需参数数组</param>/// <returns></returns>public static OracleDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters){// 创建一个OracleCommandOracleCommand cmd = new OracleCommand();// 创建一个OracleConnectionOracleConnection conn = new OracleConnection(connectionString);try{//调用静态方法PrepareCommand完成赋值操作PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);//执行查询OracleDataReader odr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//清空参数
                cmd.Parameters.Clear();return odr;}catch{//如果发生异常,关闭连接,并且向上抛出异常
                conn.Close();throw;}}/// <summary>/// 执行语句返回的是单行单列的结果 /// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandType">命令类型(sql或者存储过程)</param>/// <param name="commandText">sql语句或者存储过程名称</param>/// <param name="commandParameters">命令所需参数数组</param>/// <returns>返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换</returns>public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters){// 创建一个OracleCommandOracleCommand cmd = new OracleCommand();// 创建一个OracleConnectionusing (OracleConnection conn = new OracleConnection(connectionString)){//调用静态方法PrepareCommand完成赋值操作PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);//执行查询object val = cmd.ExecuteScalar();//清空参数
                cmd.Parameters.Clear();return val;}}///    <summary>///    执行语句返回的是单行单列的结果(有指定的事务参数)///    </summary>///    <param name="transaction">一个存在的事务参数</param>///    <param name="commandType">命令类型(sql或者存储过程)</param>///    <param name="commandText">sql语句或者存储过程名称</param>///    <param name="commandParameters">命令所需参数数组</param>///    <returns>返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换</returns>public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters){//如果传入的事务是空值,抛出异常if (transaction == null)throw new ArgumentNullException("transaction");//如果传入的事务无连接,抛出异常(无连接,说明传入的事务参数是已经提交过或者回滚了的事务)if (transaction != null && transaction.Connection == null)throw new ArgumentException("The transaction was rollbacked    or commited, please    provide    an open    transaction.", "transaction");// 创建一个OracleCommandOracleCommand cmd = new OracleCommand();//调用静态方法PrepareCommand完成赋值操作
            PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);//执行查询object retval = cmd.ExecuteScalar();//清空参数
            cmd.Parameters.Clear();return retval;}/// <summary>///   执行语句返回的是单行单列的结果(有指定的连接参数)/// </summary>/// <param name="conn">一个存在的连接参数</param>/// <param name="commandType">命令类型(sql或者存储过程)</param>/// <param name="commandText">sql语句或者存储过程名称</param>/// <param name="commandParameters">命令所需参数数组</param>/// <returns>返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换</returns>public static object ExecuteScalar(OracleConnection connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters){// 创建一个OracleCommandOracleCommand cmd = new OracleCommand();//调用静态方法PrepareCommand完成赋值操作PrepareCommand(cmd, connectionString, null, cmdType, cmdText, commandParameters);//执行查询object val = cmd.ExecuteScalar();//清空参数
            cmd.Parameters.Clear();return val;}/// <summary>/// Add a set of parameters to the cached/// </summary>/// <param name="cacheKey">Key value to look up the parameters</param>/// <param name="commandParameters">Actual parameters to cached</param>public static void CacheParameters(string cacheKey, params OracleParameter[] commandParameters){parmCache[cacheKey] = commandParameters;}/// <summary>/// 从缓存中获取参数/// </summary>/// <param name="cacheKey">look up 中的cachekey</param>/// <returns></returns>public static OracleParameter[] GetCachedParameters(string cacheKey){OracleParameter[] cachedParms = (OracleParameter[])parmCache[cacheKey];if (cachedParms == null)return null;// 如果缓存中有此参数OracleParameter[] clonedParms = new OracleParameter[cachedParms.Length];// 返回参数的copyfor (int i = 0, j = cachedParms.Length; i < j; i++)clonedParms[i] = (OracleParameter)((ICloneable)cachedParms[i]).Clone();return clonedParms;}/// <summary>/// 一个静态的预处理函数/// </summary>/// <param name="cmd">存在的OracleCommand对象</param>/// <param name="conn">存在的OracleConnection对象</param>/// <param name="trans">存在的OracleTransaction对象</param>/// <param name="cmdType">命令类型(sql或者存在过程)</param>/// <param name="cmdText">sql语句或者存储过程名称</param>/// <param name="commandParameters">Parameters for the command</param>private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType cmdType, string cmdText, OracleParameter[] commandParameters){//如果连接未打开,先打开连接if (conn.State != ConnectionState.Open)conn.Open();//未要执行的命令设置参数cmd.Connection = conn;cmd.CommandText = cmdText;cmd.CommandType = cmdType;//如果传入了事务,需要将命令绑定到指定的事务上去if (trans != null)cmd.Transaction = trans;//将传入的参数信息赋值给命令参数if (commandParameters != null){cmd.Parameters.AddRange(commandParameters);}}}
}

转载于:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_oracle_0001.html

OracleHelper类相关推荐

  1. 第十节:基于MVC5+Unity+EF+Log4Net的基础结构搭建

    一. 前言 从本节开始,将陆续的介绍几种框架搭建组合形式,分析每种搭建形式的优势和弊端,剖析搭建过程中涉及到的一些思想和技巧. (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:E ...

  2. 第九节:基于MVC5+AutoFac+EF+Log4Net的基础结构搭建

    一. 前言 从本节开始,将陆续的介绍几种框架搭建组合形式,分析每种搭建形式的优势和弊端,剖析搭建过程中涉及到的一些思想和技巧. (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:E ...

  3. C#-连接oracle数据库

    1.官方库Oracle.ManagedDataAccess,安装Install-Package Oracle.ManagedDataAccess 2.<add name="defaul ...

  4. C#基类库大全苏飞版--系列教程导航

                                                              C#基类库大全苏飞版--系列教程导航        在这里我把本论坛中所有相关的帮助 ...

  5. 自己搜集编写的Delphi 通用函数

    { ********************************************************************** } { Currency Common Functio ...

  6. oracleHelper 操作帮助类

    1 using System; 2 using System.Configuration; 3 using System.Data; 4 using System.Collections; 5 usi ...

  7. .NET中使用OracleHelper

    以前一直使用MSSQL,数据库操作类也是自己写的.现在项目使用Oracle,数据库操作类用的是MICROSOFT的DAAB中的OracleHelper.实际使用过程中,发现坛内少有此方面使用经验的贴子 ...

  8. C# 一个操作Oracle的简易工具类(通过System.Data.OracleClient)

    2019独角兽企业重金招聘Python工程师标准>>> 一.关于本文 运行本文中的代码,需要 1)需要手动添加引用System.Data.OracleClient 在代码最前面加入这 ...

  9. SQLServer数据库访问帮助类

    1.web.config配置数据库连接字符串 1 <?xml version="1.0"?> 2 <configuration> 3 <appSett ...

最新文章

  1. C++语言基本类型—字符型
  2. 【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance )
  3. 使用Fiddler进行Web接口测试
  4. MySQL 数据库修改访问权限,不能使用ip连接mysql问题处理:Host ‘host.docker.internal‘ is not allowed to connect to this ...
  5. cf1562D Two Hundred Twenty One
  6. 80. 删除排序数组中的重复项 II golang
  7. 编程思想:面向对象和面向过程
  8. python的排序方式
  9. MVC系统的Filter
  10. Linux Samba服务器配置
  11. 垃圾分类小程序,云开发 (附源码)
  12. 简易ElementUi+Vue模板
  13. IoT -- 物联网平台架构设计分析
  14. python爬虫中国土地市场网的相关数据最新2021/5/7
  15. Snowy Smile (HDU - 6638,稀疏矩阵子矩阵最大和)
  16. Rust学习记录 -> 线程之间的通道通信
  17. 【蓝桥杯】【啊哈!算法】冒泡排序
  18. 杨天宇20180912-3 词频统计
  19. Python开发GUI实战:图片转换素描画工具!
  20. 说一说美国大学常用的课本吧,各位想自学的可以参考

热门文章

  1. 手动修改Outlook 2007 邮件签名
  2. Windows 2008下安装配置 WDS Windows部署服务
  3. 运维需要掌握的基础知识
  4. SQL Server 镜像构建
  5. C#2.0及C#3.0语言规范
  6. 从0到1,一步步开发React的loading组件,并发布到npm上
  7. [Eclipse]GEF入门系列(六、添加菜单和工具条)
  8. DotText源码学习——ASP.NET的工作机制
  9. MySQL5.5编译安装
  10. 打工皇帝杨元庆年薪达2136万美元 联想称很合理