zoukankan      html  css  js  c++  java
  • C#DbHelperOra,Oracle数据库帮助类 (转载)

    主要功能如下
    数据访问抽象基础类 主要是访问Oracle数据库主要实现如下功能

        1.数据访问基础类(基于Oracle),主要是用来访问Oracle数据库的。
        2.得到最大值;是否存在;是否存在(基于OracleParameter );
        3.执行SQL语句,返回影响的记录数;
        4.执行多条SQL语句,实现数据库事务;
        5.执行带一个存储过程参数的的SQL语句;
        6.向数据库里插入图像格式的字段(和上面情况类似的另一种实例);
        7.执行一条计算查询结果语句,返回查询结果(object);
        8.执行查询语句,返回OracleDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close );
        9.执行查询语句,返回DataSet;
        10.执行SQL语句,返回影响的记录数;
        11.执行多条SQL语句,实现数据库事务;
        12.执行一条计算查询结果语句,返回查询结果(object);
        13.执行查询语句,返回OracleDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close );
        14.执行查询语句,返回DataSet;
        15.执行存储过程 返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close );
        16.执行存储过程;构建 OracleCommand 对象(用来返回一个结果集,而不是一个整数值);
        17.执行存储过程,返回影响的行数;
        18.创建 OracleCommand 对象实例(用来返回一个整数值)
    /// <summary>
    /// 编 码 人:苏飞
    /// 联系方式:361983679  
    /// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http://www.sufeinet.com/thread-655-1-1.html[/url]
    /// </summary>
    using System;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Data;
    using System.Data.OracleClient;
    using System.Configuration;
     
    namespace Maticsoft.DBUtility
    {
      /// <summary>
      /// 数据访问基础类(基于Oracle)
      /// 可以用户可以修改满足自己项目的需要。
      /// </summary>
      public abstract class DbHelperOra
      {
            //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.    
            public static string connectionString = "连接字符串"; 
        public DbHelperOra()
        {      
        }
     
            #region 公用方法
             
            public static int GetMaxID(string FieldName, string TableName)
            {
                string strsql = "select max(" + FieldName + ")+1 from " + TableName;
                object obj = GetSingle(strsql);
                if (obj == null)
                {
                    return 1;
                }
                else
                {
                    return int.Parse(obj.ToString());
                }
            }
            public static bool Exists(string strSql)
            {
                object obj = GetSingle(strSql);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                {
                    cmdresult = 0;
                }
                else
                {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
     
            public static bool Exists(string strSql, params OracleParameter[] cmdParms)
            {
                object obj = GetSingle(strSql, cmdParms);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                {
                    cmdresult = 0;
                }
                else
                {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            
            #endregion
     
         
        #region  执行简单SQL语句
     
        /// <summary>
        /// 执行SQL语句,返回影响的记录数
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <returns>影响的记录数</returns>
        public static int ExecuteSql(string SQLString)
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {        
            using (OracleCommand cmd = new OracleCommand(SQLString,connection))
            {
              try
              {    
                connection.Open();
                int rows=cmd.ExecuteNonQuery();
                return rows;
              }
              catch(System.Data.OracleClient.OracleException E)
              {          
                connection.Close();
                throw new Exception(E.Message);
              }
            }        
          }
        }
         
        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">多条SQL语句</param>    
        public static void ExecuteSqlTran(ArrayList SQLStringList)
        {
          using (OracleConnection conn = new OracleConnection(connectionString))
          {
            conn.Open();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection=conn;        
            OracleTransaction tx=conn.BeginTransaction();      
            cmd.Transaction=tx;        
            try
            {       
              for(int n=0;n<SQLStringList.Count;n++)
              {
                string strsql=SQLStringList[n].ToString();
                if (strsql.Trim().Length>1)
                {
                  cmd.CommandText=strsql;
                  cmd.ExecuteNonQuery();
                }
              }                    
              tx.Commit();          
            }
            catch(System.Data.OracleClient.OracleException E)
            {    
              tx.Rollback();
              throw new Exception(E.Message);
            }
          }
        }
        /// <summary>
        /// 执行带一个存储过程参数的的SQL语句。
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
        /// <returns>影响的记录数</returns>
        public static int ExecuteSql(string SQLString,string content)
        {        
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            OracleCommand cmd = new OracleCommand(SQLString,connection);
                    System.Data.OracleClient.OracleParameter myParameter = new System.Data.OracleClient.OracleParameter("@content", OracleType.NVarChar);
            myParameter.Value = content ;
            cmd.Parameters.Add(myParameter);
            try
            {
              connection.Open();
              int rows=cmd.ExecuteNonQuery();
              return rows;
            }
            catch(System.Data.OracleClient.OracleException E)
            {        
              throw new Exception(E.Message);
            }
            finally
            {
              cmd.Dispose();
              connection.Close();
            }  
          }
        }    
        /// <summary>
        /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
        /// </summary>
        /// <param name="strSQL">SQL语句</param>
        /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
        /// <returns>影响的记录数</returns>
        public static int ExecuteSqlInsertImg(string strSQL,byte[] fs)
        {    
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            OracleCommand cmd = new OracleCommand(strSQL,connection);
                    System.Data.OracleClient.OracleParameter myParameter = new System.Data.OracleClient.OracleParameter("@fs", OracleType.LongRaw);
            myParameter.Value = fs ;
            cmd.Parameters.Add(myParameter);
            try
            {
              connection.Open();
              int rows=cmd.ExecuteNonQuery();
              return rows;
            }
            catch(System.Data.OracleClient.OracleException E)
            {        
              throw new Exception(E.Message);
            }
            finally
            {
              cmd.Dispose();
              connection.Close();
            }        
          }
        }
         
        /// <summary>
        /// 执行一条计算查询结果语句,返回查询结果(object)。
        /// </summary>
        /// <param name="SQLString">计算查询结果语句</param>
        /// <returns>查询结果(object)</returns>
        public static object GetSingle(string SQLString)
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            using(OracleCommand cmd = new OracleCommand(SQLString,connection))
            {
              try
              {
                connection.Open();
                object obj = cmd.ExecuteScalar();
                if((Object.Equals(obj,null))||(Object.Equals(obj,System.DBNull.Value)))
                {          
                  return null;
                }
                else
                {
                  return obj;
                }        
              }
              catch(System.Data.OracleClient.OracleException e)
              {            
                connection.Close();
                throw new Exception(e.Message);
              }  
            }
          }
        }
        /// <summary>
            /// 执行查询语句,返回OracleDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>OracleDataReader</returns>
        public static OracleDataReader ExecuteReader(string strSQL)
        {
          OracleConnection connection = new OracleConnection(connectionString);      
          OracleCommand cmd = new OracleCommand(strSQL,connection);        
          try
          {
            connection.Open();
                    OracleDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return myReader;
          }
          catch(System.Data.OracleClient.OracleException e)
          {                
            throw new Exception(e.Message);
          }      
           
        }    
        /// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="SQLString">查询语句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string SQLString)
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            DataSet ds = new DataSet();
            try
            {
              connection.Open();
              OracleDataAdapter command = new OracleDataAdapter(SQLString,connection);        
              command.Fill(ds,"ds");
            }
            catch(System.Data.OracleClient.OracleException ex)
            {        
              throw new Exception(ex.Message);
            }      
            return ds;
          }      
        }
     
     
        #endregion
     
        #region 执行带参数的SQL语句
     
        /// <summary>
        /// 执行SQL语句,返回影响的记录数
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <returns>影响的记录数</returns>
        public static int ExecuteSql(string SQLString,params OracleParameter[] cmdParms)
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {        
            using (OracleCommand cmd = new OracleCommand())
            {
              try
              {    
                PrepareCommand(cmd, connection, null,SQLString, cmdParms);
                int rows=cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return rows;
              }
              catch(System.Data.OracleClient.OracleException E)
              {        
                throw new Exception(E.Message);
              }
            }        
          }
        }
         
           
        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的OracleParameter[])</param>
        public static void ExecuteSqlTran(Hashtable SQLStringList)
        {      
          using (OracleConnection conn = new OracleConnection(connectionString))
          {
            conn.Open();
            using (OracleTransaction trans = conn.BeginTransaction()) 
            {
              OracleCommand cmd = new OracleCommand();
              try
              {
                //循环
                foreach (DictionaryEntry myDE in SQLStringList)
                {  
                  string   cmdText=myDE.Key.ToString();
                  OracleParameter[] cmdParms=(OracleParameter[])myDE.Value;
                  PrepareCommand(cmd,conn,trans,cmdText, cmdParms);
                  int val = cmd.ExecuteNonQuery();
                  cmd.Parameters.Clear();
     
                  trans.Commit();
                }          
              }
              catch
              {
                trans.Rollback();
                throw;
              }
            }        
          }
        }
       
             
        /// <summary>
        /// 执行一条计算查询结果语句,返回查询结果(object)。
        /// </summary>
        /// <param name="SQLString">计算查询结果语句</param>
        /// <returns>查询结果(object)</returns>
        public static object GetSingle(string SQLString,params OracleParameter[] cmdParms)
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            using (OracleCommand cmd = new OracleCommand())
            {
              try
              {
                PrepareCommand(cmd, connection, null,SQLString, cmdParms);
                object obj = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                if((Object.Equals(obj,null))||(Object.Equals(obj,System.DBNull.Value)))
                {          
                  return null;
                }
                else
                {
                  return obj;
                }        
              }
              catch(System.Data.OracleClient.OracleException e)
              {        
                throw new Exception(e.Message);
              }          
            }
          }
        }
         
        /// <summary>
            /// 执行查询语句,返回OracleDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>OracleDataReader</returns>
        public static OracleDataReader ExecuteReader(string SQLString,params OracleParameter[] cmdParms)
        {    
          OracleConnection connection = new OracleConnection(connectionString);
          OracleCommand cmd = new OracleCommand();        
          try
          {
            PrepareCommand(cmd, connection, null,SQLString, cmdParms);
                    OracleDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            cmd.Parameters.Clear();
            return myReader;
          }
          catch(System.Data.OracleClient.OracleException e)
          {                
            throw new Exception(e.Message);
          }          
           
        }    
         
        /// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="SQLString">查询语句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string SQLString,params OracleParameter[] cmdParms)
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            OracleCommand cmd = new OracleCommand();
            PrepareCommand(cmd, connection, null,SQLString, cmdParms);
            using( OracleDataAdapter da = new OracleDataAdapter(cmd) )
            {
              DataSet ds = new DataSet();  
              try
              {                        
                da.Fill(ds,"ds");
                cmd.Parameters.Clear();
              }
              catch(System.Data.OracleClient.OracleException ex)
              {        
                throw new Exception(ex.Message);
              }      
              return ds;
            }        
          }      
        }
     
     
        private static void PrepareCommand(OracleCommand cmd,OracleConnection conn,OracleTransaction trans, string cmdText, OracleParameter[] cmdParms) 
        {
          if (conn.State != ConnectionState.Open)
            conn.Open();
          cmd.Connection = conn;
          cmd.CommandText = cmdText;
          if (trans != null)
            cmd.Transaction = trans;
          cmd.CommandType = CommandType.Text;//cmdType;
          if (cmdParms != null) 
          {
            foreach (OracleParameter parm in cmdParms)
              cmd.Parameters.Add(parm);
          }
        }
     
        #endregion
     
        #region 存储过程操作
     
        /// <summary>
            /// 执行存储过程 返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <returns>OracleDataReader</returns>
        public static OracleDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )
        {
          OracleConnection connection = new OracleConnection(connectionString);
          OracleDataReader returnReader;
          connection.Open();
          OracleCommand command = BuildQueryCommand( connection,storedProcName, parameters );
          command.CommandType = CommandType.StoredProcedure;
                returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);        
          return returnReader;      
        }
         
         
        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <param name="tableName">DataSet结果中的表名</param>
        /// <returns>DataSet</returns>
        public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            DataSet dataSet = new DataSet();
            connection.Open();
            OracleDataAdapter sqlDA = new OracleDataAdapter();
            sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters );
            sqlDA.Fill( dataSet, tableName );
            connection.Close();
            return dataSet;
          }
        }
     
         
        /// <summary>
        /// 构建 OracleCommand 对象(用来返回一个结果集,而不是一个整数值)
        /// </summary>
        /// <param name="connection">数据库连接</param>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <returns>OracleCommand</returns>
        private static OracleCommand BuildQueryCommand(OracleConnection connection,string storedProcName, IDataParameter[] parameters)
        {      
          OracleCommand command = new OracleCommand( storedProcName, connection );
          command.CommandType = CommandType.StoredProcedure;
          foreach (OracleParameter parameter in parameters)
          {
            command.Parameters.Add( parameter );
          }
          return command;      
        }
         
        /// <summary>
        /// 执行存储过程,返回影响的行数    
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <param name="rowsAffected">影响的行数</param>
        /// <returns></returns>
        public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
        {
          using (OracleConnection connection = new OracleConnection(connectionString))
          {
            int result;
            connection.Open();
            OracleCommand command = BuildIntCommand(connection,storedProcName, parameters );
            rowsAffected = command.ExecuteNonQuery();
            result = (int)command.Parameters["ReturnValue"].Value;
            //Connection.Close();
            return result;
          }
        }
         
        /// <summary>
        /// 创建 OracleCommand 对象实例(用来返回一个整数值)  
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <returns>OracleCommand 对象实例</returns>
        private static OracleCommand BuildIntCommand(OracleConnection connection,string storedProcName, IDataParameter[] parameters)
        {
          OracleCommand command = BuildQueryCommand(connection,storedProcName, parameters );
          command.Parameters.Add( new OracleParameter ( "ReturnValue",
                    OracleType.Int32, 4, ParameterDirection.ReturnValue,
            false,0,0,string.Empty,DataRowVersion.Default,null ));
          return command;
        }
        #endregion  
      }
    }
  • 相关阅读:
    The Python Standard Library
    Python 中的round函数
    Python文件类型
    Python中import的用法
    Python Symbols 各种符号
    python 一行写多个语句
    免费SSL证书(https网站)申请,便宜SSL https证书申请
    元宇宙游戏Axie龙头axs分析
    OLE DB provider "SQLNCLI10" for linked server "x.x.x.x" returned message "No transaction is active.".
    The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "xxx.xxx.xxx.xxx" was unable to begin a distributed transaction.
  • 原文地址:https://www.cnblogs.com/lizeyan/p/3628138.html
Copyright © 2011-2022 走看看