using System;using System.Configuration;using System.Data;using System.Collections;using Oracle.DataAccess.Client;namespace OracleHelper{ //////Oracle数据库操作帮助类 /// 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; //为缓存的参数创建一个hashtable private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); ////// 增删改操作使用此方法 /// /// 连接字符串 /// 命令类型(sql语句或者存储过程) /// 要执行的sql语句或者存储过程名称 /// 执行所需的一些参数 ///返回受影响的行数 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { // 创建一个OracleCommand OracleCommand cmd = new OracleCommand(); //创建一个OracleConnection using (OracleConnection connection = new OracleConnection(connectionString)) { //调用静态方法PrepareCommand完成赋值操作 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); //执行命令返回 int val = cmd.ExecuteNonQuery(); //清空参数 cmd.Parameters.Clear(); return val; } } ////// 增删改操作使用此方法(需要一个存在的事务参数) /// /// 一个存在的事务 /// 命令类型(sql或者存储过程) /// sql语句或者存储过程名称 /// 命令所需参数数组 ///返回受影响的行数 public static int ExecuteNonQuery(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { // 创建一个OracleCommand OracleCommand cmd = new OracleCommand(); //调用静态方法PrepareCommand完成赋值操作 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); //执行命令返回 int val = cmd.ExecuteNonQuery(); //清空参数 cmd.Parameters.Clear(); return val; } ////// 增删改操作使用此方法(需要一个存在的连接) /// /// 一个存在的OracleConnection参数 /// 命令类型(sql或者存储过程) /// sql语句或者存储过程名称 /// 命令所需参数数组 ///返回受影响的行数 public static int ExecuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { // 创建一个OracleCommand OracleCommand cmd = new OracleCommand(); //调用静态方法PrepareCommand完成赋值操作 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); //执行命令返回 int val = cmd.ExecuteNonQuery(); //清空参数 cmd.Parameters.Clear(); return val; } ////// 查询返回一个结果集 /// /// 连接字符串 //// 命令类型(sql或者存储过程) /// sql语句或者存储过程名称 /// 命令所需参数数组 ///public static OracleDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { // 创建一个OracleCommand OracleCommand cmd = new OracleCommand(); // 创建一个OracleConnection OracleConnection 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; } } /// /// 执行语句返回的是单行单列的结果 /// /// 连接字符串 /// 命令类型(sql或者存储过程) /// sql语句或者存储过程名称 /// 命令所需参数数组 ///返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { // 创建一个OracleCommand OracleCommand cmd = new OracleCommand(); // 创建一个OracleConnection using (OracleConnection conn = new OracleConnection(connectionString)) { //调用静态方法PrepareCommand完成赋值操作 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); //执行查询 object val = cmd.ExecuteScalar(); //清空参数 cmd.Parameters.Clear(); return val; } } ////// 执行语句返回的是单行单列的结果(有指定的事务参数) /// /// 一个存在的事务参数 /// 命令类型(sql或者存储过程) /// sql语句或者存储过程名称 /// 命令所需参数数组 ///返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换 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"); // 创建一个OracleCommand OracleCommand cmd = new OracleCommand(); //调用静态方法PrepareCommand完成赋值操作 PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters); //执行查询 object retval = cmd.ExecuteScalar(); //清空参数 cmd.Parameters.Clear(); return retval; } ////// 执行语句返回的是单行单列的结果(有指定的连接参数) /// /// 一个存在的连接参数 /// 命令类型(sql或者存储过程) /// sql语句或者存储过程名称 /// 命令所需参数数组 ///返回是第一行第一列的结果(object类型)请使用Covert.to进行类型转换 public static object ExecuteScalar(OracleConnection connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { // 创建一个OracleCommand OracleCommand cmd = new OracleCommand(); //调用静态方法PrepareCommand完成赋值操作 PrepareCommand(cmd, connectionString, null, cmdType, cmdText, commandParameters); //执行查询 object val = cmd.ExecuteScalar(); //清空参数 cmd.Parameters.Clear(); return val; } ////// Add a set of parameters to the cached /// /// Key value to look up the parameters /// Actual parameters to cached public static void CacheParameters(string cacheKey, params OracleParameter[] commandParameters) { parmCache[cacheKey] = commandParameters; } ////// 从缓存中获取参数 /// /// look up 中的cachekey ///public static OracleParameter[] GetCachedParameters(string cacheKey) { OracleParameter[] cachedParms = (OracleParameter[])parmCache[cacheKey]; if (cachedParms == null) return null; // 如果缓存中有此参数 OracleParameter[] clonedParms = new OracleParameter[cachedParms.Length]; // 返回参数的copy for (int i = 0, j = cachedParms.Length; i < j; i++) clonedParms[i] = (OracleParameter)((ICloneable)cachedParms[i]).Clone(); return clonedParms; } /// /// 一个静态的预处理函数 /// /// 存在的OracleCommand对象 /// 存在的OracleConnection对象 /// 存在的OracleTransaction对象 /// 命令类型(sql或者存在过程) /// sql语句或者存储过程名称 /// Parameters for the command 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); } } }}