OracleHelper.cs

发布日期:2014-03-08 21:36:57
namespace Smart.DBUtility
{
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.OracleClient;
    using System.Configuration;

    /// <summary>
    /// Oracle 数据访问
    /// </summary>
    public abstract class OracleHelper
    {
        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public static string ConnectionString = Smart.Security.Encrypter.Decrypt(ConfigurationManager.AppSettings["ConnectionStrings"], ConfigurationManager.AppSettings["EncryptKey"]);


        /// <summary>
        /// Execute a database query which does not include a select
        /// </summary>
        /// <param name="connectionString">Connection string to database</param>
        /// <param name="commandType">Command type either stored procedure or SQL</param>
        /// <param name="commandText">Acutall SQL Command</param>
        /// <param name="commandParameters">Parameters to bind to the command</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {
            // Create a new Oracle command
            OracleCommand cmd = new OracleCommand();


            //Create a connection
            using (OracleConnection connection = new OracleConnection(connectionString))
            {


                //Prepare the command
                PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);


                //Execute the command
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }


        /// <summary>
        /// Execute an OracleCommand (that returns no resultset) against an existing database transaction 
        /// using the provided parameters.
        /// </summary>
        /// <remarks>
        /// e.g.:  
        ///  int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new OracleParameter(":prodid", 24));
        /// </remarks>
        /// <param name="trans">an existing database transaction</param>
        /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
        /// <param name="commandText">the stored procedure name or PL/SQL command</param>
        /// <param name="commandParameters">an array of OracleParamters used to execute the command</param>
        /// <returns>an int representing the number of rows affected by the command</returns>
        public static int ExecuteNonQuery(OracleTransaction trans, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {
            OracleCommand cmd = trans.Connection.CreateCommand();
            PrepareCommand(cmd, trans.Connection, trans, commandType, commandText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }


        /// <summary>
        /// Execute an OracleCommand (that returns no resultset) against an existing database connection 
        /// using the provided parameters.
        /// </summary>
        /// <remarks>
        /// e.g.:  
        ///  int result = ExecuteNonQuery(connectionString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter(":prodid", 24));
        /// </remarks>
        /// <param name="connection">an existing database connection</param>
        /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
        /// <param name="commandText">the stored procedure name or PL/SQL command</param>
        /// <param name="commandParameters">an array of OracleParamters used to execute the command</param>
        /// <returns>an int representing the number of rows affected by the command</returns>
        public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {


            OracleCommand cmd = new OracleCommand();


            PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }
        /// <summary>
        /// 执行非查询操作的重载,增加了是否清除oracle参数的参数字段 
        /// </summary>
        /// <param name="command">数据库连接命令对象</param>
        /// <param name="commandType">命令类型</param>
        /// <param name="commandText">命令</param>
        /// <param name="isClearPara">是否清除oracle参数</param>
        /// <param name="commandParameters">oracle参数</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(OracleCommand command, CommandType commandType, string commandText, bool isClearPara, params OracleParameter[] commandParameters)
        {
            command.Connection = new OracleConnection(ConnectionString);
            command.CommandType = commandType;
            command.CommandText = commandText;
            if (commandParameters != null)
            {
                foreach (OracleParameter parm in commandParameters)
                {
                    command.Parameters.Add(parm);
                }
            }
            command.Connection.Open();
            int val = command.ExecuteNonQuery();
            if (isClearPara)
            {
                command.Parameters.Clear();
            }
            return val;
        }
        /// <summary>
        /// 执行非查询操作的重载,增加了是否清除oracle参数的参数字段 
        /// </summary>
        /// <param name="command">数据库连接命令对象</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(ref OracleCommand command)
        {
            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                command.Connection = conn;
                command.Connection.Open();
                int val = command.ExecuteNonQuery();
                return val;
            }
        }
        /// <summary>
        /// 执行SQL语句操作数据库
        /// </summary>
        /// <param name="commandText">SQL语句</param>
        /// <param name="commandParameters">参数数组</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string commandText, params OracleParameter[] commandParameters) {


            using (OracleConnection conn = new OracleConnection(ConnectionString)) {
                OracleCommand cmd = new OracleCommand();
                try {
                    if (conn.State != ConnectionState.Open) {
                        conn.Open();
                    }
                    cmd = BuildCommand(conn, commandText, commandParameters);
                    int val = cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    conn.Close();
                    return val;
                } catch (System.Data.OracleClient.OracleException ex) {
                    if (conn.State != ConnectionState.Closed) {
                        conn.Close();
                    }
                    throw new Exception(ex.Message);
                } finally {
                    if (conn.State != ConnectionState.Closed) {
                        conn.Close();
                    }
                    cmd.Dispose();
                }
            }
        }


        /// <summary>
        /// 执行SQL语句操作数据库
        /// </summary>
        /// <param name="cmdText">sql语句</param>
        /// <returns>影响行数</returns>
        public static int ExecuteNonQuery(string cmdText)
        {


            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                StringBuilder commandText = new StringBuilder(cmdText);
                OracleCommand cmd = new OracleCommand(commandText.ToString(), conn);
                try
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }
                    int val = cmd.ExecuteNonQuery();
                    conn.Close();
                    return val;
                }
                catch (Exception err)
                {
                    if (conn.State != ConnectionState.Closed)
                    {
                        conn.Close();
                    }
                    throw new Exception(err.Message);
                }
            }


        }
        /// <summary>
        /// Execute a select query that will return a result set
        /// </summary>
        /// <param name="connectionString">Connection string</param>
        /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
        /// <param name="commandText">the stored procedure name or PL/SQL command</param>
        /// <param name="commandParameters">an array of OracleParamters used to execute the command</param>
        /// <returns></returns>
        public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {


            //Create the command and connection
            OracleCommand cmd = new OracleCommand();
            OracleConnection conn = new OracleConnection(connectionString);


            try
            {
                //Prepare the command to execute
                PrepareCommand(cmd, conn, null, commandType, commandText, commandParameters);


                //Execute the query, stating that the connection should close when the resulting datareader has been read
                OracleDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;


            }
            catch
            {


                //If an error occurs close the connection as the reader will not be used and we expect it to close the connection
                conn.Close();
                throw;
            }
        }


        /// <summary>
        /// 执行Reader.提供从数据源读取数据行的只进流的方法
        /// </summary>
        /// <param name="commandText">SQL文本命令</param>
        /// <returns>OracleDataReader</returns>
        public static OracleDataReader ExecuteReader(string commandText)
        {


            //Create the command and connection
            OracleCommand cmd = new OracleCommand();
            OracleConnection conn = new OracleConnection(ConnectionString);


            try
            {
                //Prepare the command to execute
                PrepareCommand(cmd, conn, null, CommandType.Text, commandText, null);


                //Execute the query, stating that the connection should close when the resulting datareader has been read
                OracleDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);


                return rdr;


            }
            catch
            {


                //If an error occurs close the connection as the reader will not be used and we expect it to close the connection
                conn.Close();
                throw;
            }
        }


        /// <summary>
        /// 执行查询,并将查询返回的结果集中第一行的第一列作为.Net的数据类型返回。忽略额外的列或行。
        /// Execute an OracleCommand that returns the first column of the first record against the database specified in the connection string 
        /// using the provided parameters.
        /// </summary>
        /// <remarks>
        /// e.g.:  
        ///  Object obj = ExecuteScalar(connectionString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter(":prodid", 24));
        /// </remarks>
        /// <param name="connectionString">一个有效的连接字符串</param>
        /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
        /// <param name="commandText">the stored procedure name or PL/SQL command</param>
        /// <param name="commandParameters">an array of OracleParamters used to execute the command</param>
        /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
        public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {
            OracleCommand cmd = new OracleCommand();


            using (OracleConnection conn = new OracleConnection(connectionString))
            {
                PrepareCommand(cmd, conn, null, commandType, commandText, commandParameters);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
        }


        ///	<summary>
        /// 执行查询,并将查询返回的结果集中第一行的第一列作为.Net的数据类型返回。忽略额外的列或行。
        ///	Execute	a OracleCommand (that returns a 1x1 resultset)	against	the	specified SqlTransaction
        ///	using the provided parameters.
        ///	</summary>
        ///	<param name="transaction">A	valid SqlTransaction</param>
        ///	<param name="commandType">The CommandType (stored procedure, text, etc.)</param>
        ///	<param name="commandText">The stored procedure name	or PL/SQL command</param>
        ///	<param name="commandParameters">An array of	OracleParamters used to execute the command</param>
        ///	<returns>An	object containing the value	in the 1x1 resultset generated by the command</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");


            // Create a	command	and	prepare	it for execution
            OracleCommand cmd = new OracleCommand();


            PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);


            // Execute the command & return	the	results
            object retval = cmd.ExecuteScalar();


            // Detach the SqlParameters	from the command object, so	they can be	used again
            cmd.Parameters.Clear();
            return retval;
        }


        /// <summary>
        /// 执行查询,并将查询返回的结果集中第一行的第一列作为.Net的数据类型返回。忽略额外的列或行。
        /// Execute an OracleCommand that returns the first column of the first record against an existing database connection 
        /// using the provided parameters.
        /// </summary>
        /// <remarks>
        /// e.g.:  
        ///  Object obj = ExecuteScalar(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter(":prodid", 24));
        /// </remarks>
        /// <param name="connection">一个现有的数据库连接 </param>
        /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
        /// <param name="commandText">the stored procedure name or PL/SQL command</param>
        /// <param name="commandParameters">an array of OracleParamters used to execute the command</param>
        /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
        public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {
            OracleCommand cmd = new OracleCommand();


            PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
            object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return val;
        }


        /// <summary>
        /// 执行查询,并将查询返回的结果集中第一行的第一列作为.Net的数据类型返回。忽略额外的列或行。
        /// </summary>
        /// <param name="commandType">命令类型</param>
        /// <param name="commandText">命令文本</param>
        /// <returns></returns>
        /// 创建标识:张晋20070508
        public static object ExecuteScalar(CommandType commandType, string commandText)
        {
            OracleCommand cmd = new OracleCommand();


            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                PrepareCommand(cmd, conn, null, commandType, commandText, null);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
        }


        /// <summary>
        /// 执行查询,并将查询返回的结果集中第一行的第一列作为.Net的数据类型返回。忽略额外的列或行。
        /// </summary>
        /// <param name="commandText">sql语句</param>
        /// <returns></returns>
        /// 创建标识:张晋20070508
        public static Object ExecuteScalar(string commandText)
        {
            OracleCommand cmd = new OracleCommand();


            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                PrepareCommand(cmd, conn, null, CommandType.Text, commandText, null);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
        }


        /// <summary>
        /// Internal function to prepare a command for execution by the database
        /// </summary>
        /// <param name="cmd">Existing command object</param>
        /// <param name="conn">Database connection object</param>
        /// <param name="trans">Optional transaction object</param>
        /// <param name="commandType">Command type, e.g. stored procedure</param>
        /// <param name="commandText">Command test</param>
        /// <param name="commandParameters">Parameters for the command</param>
        private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType commandType, string commandText, OracleParameter[] commandParameters)
        {


            //Open the connection if required
            if (conn.State != ConnectionState.Open)
                conn.Open();


            //Set up the command
            cmd.Connection = conn;
            cmd.CommandText = commandText;
            cmd.CommandType = commandType;


            //Bind it to the transaction if it exists
            if (trans != null)
                cmd.Transaction = trans;


            // Bind the parameters passed in
            if (commandParameters != null)
            {
                foreach (OracleParameter parm in commandParameters)
                    cmd.Parameters.Add(parm);
            }
        }


        ///// <summary>
        ///// Converter to use boolean data type with Oracle
        ///// </summary>
        ///// <param name="value">Value to convert</param>
        ///// <returns></returns>
        //public static string OraBit(bool value)
        //{
        //    if (value)
        //        return "Y";
        //    else
        //        return "N";
        //}


        ///// <summary>
        ///// Converter to use boolean data type with Oracle
        ///// </summary>
        ///// <param name="value">Value to convert</param>
        ///// <returns></returns>
        //public static bool OraBool(string value)
        //{
        //    if (value.Equals("Y"))
        //        return true;
        //    else
        //        return false;
        //}


        ///// <summary>
        ///// 执行存储过程  (使用该方法切记要手工关闭SqlDataReader和连接)
        ///// </summary>
        ///// <param name="storedProcName">存储过程名</param>
        ///// <param name="parameters">存储过程参数</param>
        ///// <returns>SqlDataReader</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();
        //    //Connection.Close(); 不能在此关闭,否则,返回的对象将无法使用            
        //    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, OracleParameter[] parameters, string tableName)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                DataSet dataSet = new DataSet();
                connection.Open();
                OracleDataAdapter oracleDA = new OracleDataAdapter();
                oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                oracleDA.Fill(dataSet, tableName);
                connection.Close();
                return dataSet;
            }
        }


        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <returns>DataSet</returns>
        public static DataSet RunProcedure(string storedProcName, OracleParameter[] parameters)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                DataSet dataSet = new DataSet();
                connection.Open();
                OracleDataAdapter oracleDA = new OracleDataAdapter();
                oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                oracleDA.Fill(dataSet);
                connection.Close();
                return dataSet;
            }
        }


        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">int型输出值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string out_msg, ref int out_result)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;
                    connection.Close();


                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }


            }


        }


        /// <summary>
        ///  获取
        /// </summary>
        /// <param name="storedProcName"></param>
        /// <param name="parameters"></param>
        /// <param name="out_msg"></param>
        /// <param name="out_result"></param>
        public static void RunProcedureOutValue(string storedProcName, OracleParameter[] parameters, ref string out_msg, ref int out_result, ref int outValue)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;
                    if (cmd.Parameters["prmoutvalue"].Value != DBNull.Value)
                        outValue = int.Parse(cmd.Parameters["prmoutvalue"].Value.ToString());
                    connection.Close();


                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }


            }


        }




        /// <summary>
        /// 申请充值接口
        /// </summary>
        /// <param name="storedProcName"></param>
        /// <param name="parameters"></param>
        /// <param name="out_msg"></param>
        /// <param name="out_result"></param>
        /// <param name="planid"></param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string out_msg, ref int out_result, ref int planid)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["prmplanid"].Value != DBNull.Value)
                        planid = int.Parse(cmd.Parameters["prmplanid"].Value.ToString());
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;
                    connection.Close();


                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }


            }


        }


        /// <summary>
        /// 执行存储过程(一个decimal型和一个字符型输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal out_result, ref string out_msg)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        /// 执行存储过程(卡登记)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref int customerID, ref decimal cardNo, ref string id, ref string noUsedate, ref decimal out_result, ref string out_msg)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;


                    if (cmd.Parameters["prmcustomerid"].Value != DBNull.Value)
                    {
                        customerID = int.Parse(cmd.Parameters["prmcustomerid"].Value.ToString());
                    }
                    if (cmd.Parameters["prmcardno"].Value != DBNull.Value)
                    {
                        cardNo = decimal.Parse(cmd.Parameters["prmcardno"].Value.ToString());
                    }
                    if (cmd.Parameters["prmid"].Value != DBNull.Value)
                    {
                        id = (String)cmd.Parameters["prmid"].Value;
                    }
                    if (cmd.Parameters["prmnousedate"].Value != DBNull.Value)
                    {
                        noUsedate = (String)cmd.Parameters["prmnousedate"].Value;
                    }
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        /// 执行存储过程(发放职员卡)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal cardNo, ref string id, ref DateTime noUsedate, ref decimal out_result, ref string out_msg)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;


                    if (cmd.Parameters["prmcardno"].Value != DBNull.Value)
                    {
                        cardNo = decimal.Parse(cmd.Parameters["prmcardno"].Value.ToString());
                    }
                    if (cmd.Parameters["prmid"].Value != DBNull.Value)
                    {
                        id = (String)cmd.Parameters["prmid"].Value;
                    }
                    if (cmd.Parameters["prmnousedate"].Value != DBNull.Value)
                    {
                        noUsedate = Convert.ToDateTime(cmd.Parameters["prmnousedate"].Value);
                    }
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        /// 执行存储过程(补办功能卡)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal cardNo, ref string id, ref DateTime noUsedate, ref int cardSn, ref decimal out_result, ref string out_msg)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;


                    if (cmd.Parameters["prmcardno"].Value != DBNull.Value)
                    {
                        cardNo = decimal.Parse(cmd.Parameters["prmcardno"].Value.ToString());
                    }
                    if (cmd.Parameters["prmcardid"].Value != DBNull.Value)
                    {
                        id = (String)cmd.Parameters["prmcardid"].Value;
                    }
                    if (cmd.Parameters["prmnousedate"].Value != DBNull.Value)
                    {
                        noUsedate = Convert.ToDateTime(cmd.Parameters["prmnousedate"].Value);
                    }
                    if (cmd.Parameters["prmcardsn"].Value != DBNull.Value)
                    {
                        cardSn = int.Parse(cmd.Parameters["prmcardsn"].Value.ToString());
                    }
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        /// 执行存储过程(补办普通乘车卡)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="cardNo">输出卡号</param>
        /// <param name="id">输出发卡流水号</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal cardNo, ref string id, ref decimal out_result, ref string out_msg)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;


                    if (cmd.Parameters["prmcardno"].Value != DBNull.Value)
                    {
                        cardNo = decimal.Parse(cmd.Parameters["prmcardno"].Value.ToString());
                    }
                    if (cmd.Parameters["prmid"].Value != DBNull.Value)
                    {
                        id = (String)cmd.Parameters["prmid"].Value;
                    }


                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string id, ref DateTime noUsedate, ref decimal out_result, ref string out_msg)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;




                    if (cmd.Parameters["prmcardid"].Value != DBNull.Value)
                    {
                        id = (String)cmd.Parameters["prmcardid"].Value;
                    }
                    if (cmd.Parameters["prmcurrenttime"].Value != DBNull.Value)
                    {
                        noUsedate = Convert.ToDateTime(cmd.Parameters["prmcurrenttime"].Value);
                    }
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }




        /// <summary>
        /// 执行存储过程(一个数值型输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal out_result)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(cmd.Parameters["out_result"].Value.ToString());
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        /// 执行存储过程(一个字符型输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string out_msg)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        /// 执行存储过程(一个decimal型、一个字符型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        /// <param name="io_allrec">游标</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal out_result, ref string out_msg, ref DataSet io_allrec)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    io_allrec = dataSet;
                    if (oracleDA.SelectCommand.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(oracleDA.SelectCommand.Parameters["out_result"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)oracleDA.SelectCommand.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        /// 执行存储过程(一个string型、一个int型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_msg">输出信息</param>
        /// <param name="out_result">输入标记</param>
        /// <param name="io_allrec">游标</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string out_msg, ref int out_result, ref DataSet io_allrec)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    io_allrec = dataSet;
                    if (oracleDA.SelectCommand.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(oracleDA.SelectCommand.Parameters["out_result"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)oracleDA.SelectCommand.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }
        /// <summary>
        /// 执行存储过程(一个decimal型、一个字符型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_back">decimal型输出数值<</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal out_back, ref decimal out_result, ref string out_msg)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    if (oracleDA.SelectCommand.Parameters["out_back"].Value != DBNull.Value)
                        out_back = decimal.Parse(oracleDA.SelectCommand.Parameters["out_back"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(oracleDA.SelectCommand.Parameters["out_result"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)oracleDA.SelectCommand.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    out_msg = ex.ToString();
                    throw new Exception(ex.Message);
                }
            }


        }
        /// <summary>
        /// 执行存储过程(一个decimal型、一个字符型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_back">decimal型输出数值<</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal out_back, ref decimal out_result, ref string out_msg, ref int opcount)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    if (oracleDA.SelectCommand.Parameters["prmopcount"].Value != DBNull.Value)
                        opcount = int.Parse(oracleDA.SelectCommand.Parameters["prmopcount"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_back"].Value != DBNull.Value)
                        out_back = decimal.Parse(oracleDA.SelectCommand.Parameters["out_back"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(oracleDA.SelectCommand.Parameters["out_result"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)oracleDA.SelectCommand.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    out_msg = ex.ToString();
                    throw new Exception(ex.Message);
                }
            }


        }
        /// <summary>
        /// 执行存储过程(一个int型、一个字符型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_back">decimal型输出数值</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref int out_back, ref int out_result, ref string out_msg)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    if (oracleDA.SelectCommand.Parameters["out_back"].Value != DBNull.Value)
                        out_back = int.Parse(oracleDA.SelectCommand.Parameters["out_back"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(oracleDA.SelectCommand.Parameters["out_result"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)oracleDA.SelectCommand.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    out_msg = ex.ToString();
                    throw new Exception(ex.Message);
                }
            }


        }


        /// <summary>
        /// 执行存储过程(一个int型、一个字符型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_back">decimal型输出数值<</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="out_msg">输出信息</param>
        /// <param name="out_cardno">客户卡号</param>
        /// <param name="out_cardsn">持卡序号</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal out_cardno, ref int out_cardsn, ref int out_back, ref int out_result, ref string out_msg)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    if (oracleDA.SelectCommand.Parameters["out_back"].Value != DBNull.Value)
                        out_back = int.Parse(oracleDA.SelectCommand.Parameters["out_back"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(oracleDA.SelectCommand.Parameters["out_result"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)oracleDA.SelectCommand.Parameters["out_msg"].Value;
                    if (oracleDA.SelectCommand.Parameters["prmcardno"].Value != DBNull.Value)
                        out_cardno = decimal.Parse(oracleDA.SelectCommand.Parameters["prmcardno"].Value.ToString());
                    if (oracleDA.SelectCommand.Parameters["out_cardsn"].Value != DBNull.Value)
                        out_cardsn = int.Parse(oracleDA.SelectCommand.Parameters["out_cardsn"].Value.ToString());
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    out_msg = ex.ToString();
                    throw new Exception(ex.Message);
                }
            }


        }
        /// <summary>
        /// 执行存储过程(一个decimal型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_result">decimal型输出数值</param>
        /// <param name="io_allrec">游标</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref decimal out_result, ref DataSet io_allrec)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    io_allrec = dataSet;
                    if (oracleDA.SelectCommand.Parameters["out_result"].Value != DBNull.Value)
                        out_result = decimal.Parse(oracleDA.SelectCommand.Parameters["out_result"].Value.ToString());
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }






        /// <summary>
        /// 执行存储过程(一个字符型、一个游标输出参数)
        /// </summary>
        /// <param name="storedProcName">存储过程名称</param>
        /// <param name="parameters">参数集</param>
        /// <param name="out_msg">输出信息</param>
        /// <param name="io_allrec">游标</param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string out_msg, ref DataSet io_allrec)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataSet dataSet = new DataSet();
                    connection.Open();
                    OracleDataAdapter oracleDA = new OracleDataAdapter();
                    oracleDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                    oracleDA.Fill(dataSet);
                    io_allrec = dataSet;
                    if (oracleDA.SelectCommand.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)oracleDA.SelectCommand.Parameters["out_msg"].Value;
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    out_msg = ex.ToString();
                    throw new Exception(ex.Message);
                }
            }
        }


        /// <summary>
        ///  执行存储过程
        /// </summary>
        /// <param name="storedProcName"></param>
        /// <param name="parameters"></param>
        /// <param name="out_outid"></param>
        /// <param name="out_opfare"></param>
        /// <param name="out_bankcardno"></param>
        /// <param name="out_msg"></param>
        /// <param name="out_result"></param>
        /// <param name="out_cardno"></param>
        /// <param name="out_cardsn"></param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string out_outid, ref decimal out_opfare,
            ref string out_bankcardno, ref string out_msg, ref int out_result, ref string out_cardno, ref int out_cardsn)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;


                    if (cmd.Parameters["prmoutid"].Value != DBNull.Value)
                        out_outid = (String)cmd.Parameters["prmoutid"].Value;
                    if (cmd.Parameters["prmopfare"].Value != DBNull.Value)
                        out_opfare = (Decimal)cmd.Parameters["prmopfare"].Value;
                    if (cmd.Parameters["prmbankcardno"].Value != DBNull.Value)
                        out_bankcardno = (String)cmd.Parameters["prmbankcardno"].Value;
                    if (cmd.Parameters["prmasn"].Value != DBNull.Value)
                        out_cardno = cmd.Parameters["prmasn"].Value.ToString();
                    if (cmd.Parameters["prmcardsn"].Value != DBNull.Value)
                        out_cardsn = int.Parse(cmd.Parameters["prmcardsn"].Value.ToString());
                    connection.Close();


                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }


            }


        }
        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName"></param>
        /// <param name="parameters"></param>
        /// <param name="out_outid"></param>
        /// <param name="out_msg"></param>
        /// <param name="out_result"></param>
        public static void RunProcedure(string storedProcName, OracleParameter[] parameters, ref string out_outid,
             ref string out_msg, ref int out_result)
        {


            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["out_result"].Value != DBNull.Value)
                        out_result = int.Parse(cmd.Parameters["out_result"].Value.ToString());
                    if (cmd.Parameters["out_msg"].Value != DBNull.Value)
                        out_msg = (String)cmd.Parameters["out_msg"].Value;


                    if (cmd.Parameters["prmcustoutid"].Value != DBNull.Value)
                        out_outid = (String)cmd.Parameters["prmcustoutid"].Value;
                    connection.Close();


                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }


            }


        }


        /// <summary>
        /// 获得记录总数(仅在存储过程分页中使用)
        /// </summary>
        /// <param name="sqlCount">查询语句,含排序部分</param>
        /// <returns></returns>
        public static int GetPagedRecordsCount(string sqlCount)
        {
            string storedProcName = "pkg_page.sp_getrecordcount";	//分页存储过程名称
            int recordsCount = 0;
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                OracleParameter[] para = new OracleParameter[2];
                OracleParameter p1 = new OracleParameter();
                p1.Direction = ParameterDirection.Input;
                p1.OracleType = OracleType.VarChar;
                p1.ParameterName = "p_sqlcount";
                p1.Value = sqlCount;
                p1.Size = 1024;


                OracleParameter p2 = new OracleParameter();
                p2.Direction = ParameterDirection.Output;
                p2.OracleType = OracleType.Number;
                p2.ParameterName = "p_outrecordcount";
                //p2.Value = 0;


                para[0] = p1;
                para[1] = p2;


                try
                {
                    connection.Open();
                    OracleCommand cmd = BuildQueryCommand(connection, storedProcName, para);
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters["p_outrecordcount"].Value != DBNull.Value)
                    {
                        recordsCount = int.Parse(cmd.Parameters["p_outrecordcount"].Value.ToString());
                    }
                    connection.Close();
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
                return recordsCount;
            }
        }


        public static DataSet GetPagedRecords(string sql, int pageSize, int pageNO, ref int allRowCount)
        {
            string storedProcName = "pkg_page.sp_page";	//分页存储过程名称
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                OracleParameter[] para = new OracleParameter[5];
                OracleParameter p1 = new OracleParameter();
                OracleParameter p2 = new OracleParameter();
                OracleParameter p3 = new OracleParameter();
                OracleParameter p4 = new OracleParameter();
                OracleParameter p5 = new OracleParameter();
                p1.Direction = ParameterDirection.Input;
                p1.OracleType = OracleType.Number;
                p1.ParameterName = "p_pagesize";
                p1.Value = pageSize;


                p2.Direction = ParameterDirection.Input;
                p2.OracleType = OracleType.Number;
                p2.ParameterName = "p_pageno";
                p2.Value = pageNO;


                p3.Direction = ParameterDirection.Input;
                p3.OracleType = OracleType.VarChar;
                p3.ParameterName = "p_sqlselect";
                p3.Value = sql;
                p3.Size = 2048;


                p5.Direction = ParameterDirection.Output;
                p5.OracleType = OracleType.Int32;
                p5.ParameterName = "p_outrecordcount";


                p4.Direction = ParameterDirection.Output;
                p4.OracleType = OracleType.Cursor;
                p4.ParameterName = "p_outcursor";


                para[0] = p1;
                para[1] = p2;
                para[2] = p3;
                para[3] = p5;
                para[4] = p4;


                DataSet dstemp = OracleHelper.RunProcedure(storedProcName, para);
                allRowCount = Convert.ToInt32(p5.Value);
                return dstemp;
            }
        }


        /// <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);
                }
                catch (System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }


        /// <summary>
        /// 执行查询语句,返回DataTable
        /// </summary>
        /// <param name="commandType">执行类型</param>
        /// <param name="commandText">语句</param>
        /// <param name="commandParameters">参数</param>
        /// <returns></returns>
        public static DataTable Query(CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                DataTable tempTable = new DataTable();
                connection.Open();
                OracleDataAdapter oracleDA = new OracleDataAdapter();
                if (commandType == CommandType.Text)
                {
                    oracleDA.SelectCommand = BuildCommand(connection, commandText, commandParameters);
                }
                else
                {
                    oracleDA.SelectCommand = BuildQueryCommand(connection, commandText, commandParameters);
                }
                oracleDA.Fill(tempTable);
                connection.Close();
                return tempTable;
            }
        }




        /// <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, OracleParameter[] parameters)
        {
            OracleCommand command = new OracleCommand(storedProcName, connection);
            command.CommandType = CommandType.StoredProcedure;
            foreach (OracleParameter parameter in parameters)
            {
                if (parameter != null)
                {
                    // 检查未分配值的输出参数,将其分配以DBNull.Value.
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    command.Parameters.Add(parameter);
                }
            }
            return command;
        }


        /// <summary>
        /// 构建 OracleCommand 对象
        /// </summary>
        /// <param name="connection">OracleConnection对象</param>
        /// <param name="sqlStr">sql语句</param>
        /// <param name="parameters">OracleParameter参数对象</param>
        /// <returns>OracleCommand对象</returns> 
        private static OracleCommand BuildCommand(OracleConnection connection, string sqlStr, OracleParameter[] parameters)
        {
            OracleCommand command = new OracleCommand(sqlStr, connection);
            command.CommandType = CommandType.Text;
            if (parameters != null)
            {
                foreach (OracleParameter parameter in parameters)
                {
                    if (parameter != null)
                    {
                        // 检查未分配值的输出参数,将其分配以DBNull.Value.
                        if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                            (parameter.Value == null))
                        {
                            parameter.Value = DBNull.Value;
                        }
                        command.Parameters.Add(parameter);
                    }
                }
            }
            return command;
        }


        /// <summary>
        /// 通过命令类型、命令和参数组执行费查询操作
        /// </summary>
        /// <param name="commandType"></param>
        /// <param name="commandText"></param>
        /// <param name="commandParameters"></param>
        /// <returns></returns>
        public static int ExecuteNonQuery(CommandType commandType, string commandText, params OracleParameter[] commandParameters)
        {
            // Create a new Oracle command
            OracleCommand cmd = new OracleCommand();
            //Create a connection
            using (OracleConnection connection = new OracleConnection(ConnectionString))
            {
                //Prepare the command
                PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
                //Execute the command
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }
    }
}