zoukankan      html  css  js  c++  java
  • ADO.NET_08_OracleHelper

    using System;
    using System.Configuration;
    using System.Data;
    using System.Data.OracleClient;
    using System.Collections;
    namespace Dao.DBUtility 
    {
        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;
            private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
            public static int ExecuteNonQuery(string connectionString, 
                                            CommandType cmdType, 
                                            string cmdText, 
                                            params OracleParameter[] commandParameters) 
            {
                OracleCommand cmd = new OracleCommand();
                using (OracleConnection connection = new OracleConnection(connectionString)) 
                {
                    PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                    int val = cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
            public static int ExecuteNonQuery(OracleTransaction trans, 
                                            CommandType cmdType, 
                                            string cmdText, 
                                            params OracleParameter[] commandParameters) 
            {
                OracleCommand cmd = new OracleCommand();
                PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
            public static int ExecuteNonQuery(OracleConnection connection, 
                                            CommandType cmdType, 
                                            string cmdText, 
                                            params OracleParameter[] commandParameters) 
            {
                OracleCommand cmd = new OracleCommand();
                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
            public static OracleDataReader ExecuteReader(string connectionString, 
                                                        CommandType cmdType, 
                                                        string cmdText, 
                                                        params OracleParameter[] commandParameters) 
            {
                OracleCommand cmd = new OracleCommand();
                OracleConnection conn = new OracleConnection(connectionString);
                try 
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    OracleDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return rdr;
                }
                catch 
                {
                    conn.Close();
                    throw;
                }
            }
            public static object ExecuteScalar(string connectionString, 
                                            CommandType cmdType, 
                                            string cmdText, 
                                            params OracleParameter[] commandParameters) 
            {
                OracleCommand cmd = new OracleCommand();
                using (OracleConnection conn = new OracleConnection(connectionString)) 
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    object val = cmd.ExecuteScalar();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
          public static object ExecuteScalar(OracleTransaction transaction, 
                                                CommandType commandType, 
                                                string commandText, 
                                                params OracleParameter[] commandParameters) 
            {
             if(transaction == null)
              throw new ArgumentNullException("事务");
             if(transaction != null && transaction.Connection == null)
              throw new ArgumentException("事务以被回滚或提交,请提供一个打开的事务。", "事务");
                
             OracleCommand cmd = new OracleCommand();
                
             PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
                
             object retval = cmd.ExecuteScalar();
                
             cmd.Parameters.Clear();
             return retval;
          }
            public static object ExecuteScalar(OracleConnection connectionString, 
                                            CommandType cmdType, 
                                            string cmdText, 
                                            params OracleParameter[] commandParameters) 
            {
                OracleCommand cmd = new OracleCommand();
                PrepareCommand(cmd, connectionString, null, cmdType, cmdText, commandParameters);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
            public static void CacheParameters(string cacheKey, params OracleParameter[] commandParameters) 
            {
                parmCache[cacheKey] = commandParameters;
            }
            public static OracleParameter[] GetCachedParameters(string cacheKey) 
            {
                OracleParameter[] cachedParms = (OracleParameter[])parmCache[cacheKey];
                if (cachedParms == null)
                    return null;
                OracleParameter[] clonedParms = new OracleParameter[cachedParms.Length];
                for (int i = 0, j = cachedParms.Length; i < j; i++)
                    clonedParms[i] = (OracleParameter)((ICloneable)cachedParms[i]).Clone();
                return clonedParms;
            }
            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) 
                {
                    foreach (OracleParameter parm in commandParameters)
                        cmd.Parameters.Add(parm);
                }
            }
          public static string OraBit(bool value) 
            {
             if(value)
              return "Y";
             else
              return "N";
          }
          public static bool OraBool(string value) 
            {
             if(value.Equals("Y"))
              return true;
             else
              return false;
          } 
        }
    }

    说明

    (1) 这个抽象类对于初学者非常有学习价值;

    (2) OracleHelper是Pet Shop中的一个抽象类,这个类是基本的,封装了数据库的操作。Pet Shop相当于一个框架,在.NET和JAVA中都可以使用;

    (3) 之所以这样说,是因为,在Pet Shop中返回的数据集是IList,而不是DataSet或是DataTable;

    (4) 在NHibernate中,查询返回的数据通常都是IList,但实际中有些数据控件在数据绑定上对IList的支持并不是很好,可以将IList转换成DataSet或DataTable。

    (5) 该抽象类重载了三个ExecuteNonQuery()成员函数,用于删除修改编辑等操作,区别只在第一个参数。

    (6) 这三个重载函数的区别是,第一个参数是连接字符串的一个,不带事务处理,不需要创建OracleConnection对象;第二个参数是事务,需要用OracleConnection创建事务和Oraclecommand对象;第三个参数是OracleConnection对象,不带事务;

    (7) 该抽象类还有一个ExecuteReader()和三个重载的ExecuteScalar()成员函数,用于查询;

    (8) 该抽象类中,没有返回DataTable和DataSet的方法,不知道为什么;

    (9) 该抽象类中的PrepareCommand()成员函数,主要是将对个参数OracleParameter,添加到Oraclecommand.Parameters中。

    (10) 该抽象类中的CacheParameters()和GetCachedParameters()成员函数是在缓存中,保存和获取参数OracleParameter;

    (11) 该抽象类中的OraBit()和OraBool()成员函数是true和false在Y和N之间转换;

    (12) 该抽象类中的五个静态只读变量,要在Web.Config文件的<connectionStrings></connectionStrings>中添加;

    (13) 最后,封装操作的一个目的是,OracleCommand的操作比较麻烦。你自己可以到网上下载Pet Shop,它是免费的。

  • 相关阅读:
    Python学习之旅—生成器对象的send方法详解
    对集合多列进行求和方法的选择
    23种设计模式
    这一天,我真正的体会到。。。
    火狐浏览器导出EXCEL 表格,文件名乱码问题
    K-fold Train Version3
    K-fold Train Version2
    K-fold Train
    Confusion matrix
    Kaggle Solutions
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2155793.html
Copyright © 2011-2022 走看看