封装的ADO.NET对数据库操作经典类 [更新]

来源:互联网 发布:怎么评价林彪 知乎 编辑:程序博客网 时间:2024/04/30 23:25

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Runtime.Remoting.Messaging;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace LTP.SQLServerDAL
{
 /// <summary>
 /// ADO.NET数据库操作基础类。
 /// </summary>
 public abstract class DbManagerSQL
 {
  //数据库连接字符串
  protected static string connectionString = ConfigurationSettings.AppSettings["ConnectionString"]; 
  public DbManagerSQL()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  /// <summary>
  /// 执行SQL语句,返回影响的记录数
  /// </summary>
  /// <param name="SQLString"></param>
  /// <returns></returns>
  public static int ExecuteSql(string SQLString)
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {    
    using (SqlCommand cmd = new SqlCommand(SQLString,connection))
    {
     try
     {  
      connection.Open();
      int rows=cmd.ExecuteNonQuery();
      return rows;
     }
     catch(System.Data.SqlClient.SqlException E)
     {    
      throw new Exception(E.Message);
     }
    }    
   }
  }
  /// <summary>
  /// 执行两条SQL语句,实现数据库事务。
  /// </summary>
  /// <param name="SQLString1"></param>
  /// <param name="SQLString2"></param>
  public static void ExecuteSqlTran(string SQLString1,string SQLString2)
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    connection.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection=connection;    
    SqlTransaction tx=connection.BeginTransaction();   
    cmd.Transaction=tx;    
    try
    {     
     cmd.CommandText=SQLString1;
     cmd.ExecuteNonQuery();
     cmd.CommandText=SQLString2;
     cmd.ExecuteNonQuery();     
     tx.Commit();     
    }
    catch(System.Data.SqlClient.SqlException E)
    {  
     tx.Rollback();
     throw new Exception(E.Message);
    }
    finally
    {
     cmd.Dispose();
     connection.Close();
    } 
   }
  } 
  /// <summary>
  /// 执行多条SQL语句,实现数据库事务,每条语句以“;”分割。
  /// </summary>
  /// <param name="SQLStringList"></param>
  public static void ExecuteSqlTran(string SQLStringList)
  {
   using (OdbcConnection conn = new OdbcConnection(connectionString))
   {
    conn.Open();
    OdbcCommand cmd = new OdbcCommand();
    cmd.Connection=conn;    
    OdbcTransaction tx=conn.BeginTransaction();   
    cmd.Transaction=tx;    
    try
    {  
     string [] split= SQLStringList.Split(new Char [] { ';'});
     foreach (string strsql in split)
     {
      if (strsql.Trim()!="")
      {
       cmd.CommandText=strsql;
       cmd.ExecuteNonQuery();
      }
     }       
     tx.Commit();     
    }
    catch(System.Data.Odbc.OdbcException E)
    {  
     tx.Rollback();
     throw new Exception(E.Message);
    }
   }
  }
  /// <summary>
  /// 执行带一个存储过程参数的的SQL语句。
  /// </summary>
  /// <param name="SQLString"></param>
  /// <param name="content"></param>
  /// <returns></returns>
  public static int ExecuteSql(string SQLString,string content)
  {    
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    SqlCommand cmd = new SqlCommand(SQLString,connection);  
    System.Data.SqlClient.SqlParameter  myParameter = new System.Data.SqlClient.SqlParameter ( "@content", SqlDbType.NText);
    myParameter.Value = content ;
    cmd.Parameters.Add(myParameter);
    try
    {
     connection.Open();
     int rows=cmd.ExecuteNonQuery();
     return rows;
    }
    catch(System.Data.SqlClient.SqlException E)
    {    
     throw new Exception(E.Message);
    }
    finally
    {
     cmd.Dispose();
     connection.Close();
    } 
   }
  }  
  /// <summary>
  /// 向数据库里插入图像格式的字段
  /// </summary>
  /// <param name="strSQL"></param>
  /// <param name="fs"></param>
  /// <returns></returns>
  public static int ExecuteSqlInsertImg(string strSQL,byte[] fs)
  {  
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    SqlCommand cmd = new SqlCommand(strSQL,connection); 
    System.Data.SqlClient.SqlParameter  myParameter = new System.Data.SqlClient.SqlParameter ( "@fs", SqlDbType.Image);
    myParameter.Value = fs ;
    cmd.Parameters.Add(myParameter);
    try
    {
     connection.Open();
     int rows=cmd.ExecuteNonQuery();
     return rows;
    }
    catch(System.Data.SqlClient.SqlException E)
    {    
     throw new Exception(E.Message);
    }
    finally
    {
     cmd.Dispose();
     connection.Close();
    } 
    
   }
  }
  /// <summary>
  /// 执行一条计算查询结果语句,返回查询结果(整数)。
  /// </summary>
  /// <param name="strSQL"></param>
  /// <returns></returns>
  public static int GetCount(string strSQL)
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    SqlCommand cmd = new SqlCommand(strSQL,connection);    
    try
    {
     connection.Open();
     SqlDataReader result = cmd.ExecuteReader();
     int i=0;
     while(result.Read())
     {
      i=result.GetInt32(0);
     }
     result.Close();    
     return i;
    }
    catch(System.Data.SqlClient.SqlException e)
    {        
     throw new Exception(e.Message);
    } 
    finally
    {
     cmd.Dispose();
     connection.Close();
    }
   }
  } 
  /// <summary>
  /// 执行一条计算查询结果语句,返回查询结果(object)。
  /// </summary>
  /// <param name="SQLString"></param>
  /// <returns></returns>
  public static object GetSingle(string SQLString)
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    SqlCommand cmd = new SqlCommand(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.SqlClient.SqlException e)
    {    
     throw new Exception(e.Message);
    }
    finally
    {
     cmd.Dispose();
     connection.Close();
    }
   }
  }
  /// <summary>
  /// 执行查询语句,返回SqlDataReader
  /// </summary>
  /// <param name="strSQL"></param>
  /// <returns></returns>
  public static SqlDataReader ExecuteReader(string strSQL)
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    SqlCommand cmd = new SqlCommand(strSQL,connection); 
    SqlDataReader myReader;   
    try
    {
     connection.Open(); 
     myReader = cmd.ExecuteReader();
     return myReader;
    }
    catch(System.Data.SqlClient.SqlException e)
    {        
     throw new Exception(e.Message);
    }  
    finally
    {
     cmd.Dispose();
     connection.Close();
    } 
   }
  }  
  /// <summary>
  /// 执行查询语句,返回DataSet
  /// </summary>
  /// <param name="SQLString"></param>
  /// <returns></returns>
  public static DataSet Query(string SQLString)
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    DataSet ds = new DataSet();
    try
    {
     connection.Open();
     SqlDataAdapter command = new SqlDataAdapter(SQLString,connection);    
     command.Fill(ds,"ds");
    }
    catch(System.Data.SqlClient.SqlException ex)
    {    
     throw new Exception(ex.Message);
    }   
    return ds;
   }
   
  }


  #region 存储过程操作

  /// <summary>
  /// 运行存储过程
  /// </summary>
  /// <param name="storedProcName"></param>
  /// <param name="parameters"></param>
  /// <returns></returns>
  public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    SqlDataReader returnReader;
    connection.Open();
    SqlCommand command = BuildQueryCommand( connection,storedProcName, parameters );
    command.CommandType = CommandType.StoredProcedure;

    returnReader = command.ExecuteReader();
    //Connection.Close();
    return returnReader;
   }
  }
  private static SqlCommand BuildQueryCommand(SqlConnection connection,string storedProcName, IDataParameter[] parameters)
  {
   
    SqlCommand command = new SqlCommand( storedProcName, connection );
    command.CommandType = CommandType.StoredProcedure;
    foreach (SqlParameter parameter in parameters)
    {
     command.Parameters.Add( parameter );
    }
    return command;
   
  }  
  public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
  {
   using (SqlConnection connection = new SqlConnection(connectionString))
   {
    DataSet dataSet = new DataSet();
    connection.Open();
    SqlDataAdapter sqlDA = new SqlDataAdapter();
    sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters );
    sqlDA.Fill( dataSet, tableName );
    connection.Close();

    return dataSet;
   }
  }

  #endregion 
 }
}

--------------------------------------------------------------------------------------------------------------------------------

//这是我更新的一个版本,与上面可以说变化相当大

//其中FlashGateway是Flash Remoting的一个dll大家可以去掉相关代码,不影响使用

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using mvi.sysmanage;
using FlashGateway.IO;

namespace mvi.dbaccess
{
    #region    class sqlcom
    /// <summary>
    /// sqlcom
    /// </summary>
    public class sqlCom
    {
        //FLASHSRV/HIPIHI
        //private string DBCnStr = @"Data Source=FLASHSRV;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=1";

       private string DBCnStr = @"Data Source=mvi-dpe;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=mvi";

        public sqlCom()
        {
            //DBCnStr = @"Data Source=FLASHSRV;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=1";
            DBCnStr = @"Data Source=mvi-dpe;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=mvi";
        }

        public sqlCom(string connectstring)
        {
            if (connectstring.Length > 1)
            {
                DBCnStr = connectstring;
            }
        }

        public string SQLCnStr
        {
            get
            {
                return DBCnStr;
            }
            set
            {
                DBCnStr = value;
            }
        }

        #region InitSqlConnection    初始化Sql连接字符串
        /// <summary>
        /// 初始化Sql连接字符串
        /// </summary>
        /// <param name="DBCnStr">传入的dbconnection</param>
        /// <param name="cmdText">传入的cmd text</param>
        /// <returns>sql server connection string</returns>
        private string InitSqlConnection(string DBCnStr, string cmdText)
        {
            // temp code
            return DBCnStr;

            //// final code
            //int iD = DBCnStr.IndexOf("Data Source=");
            //int iL = DBCnStr.Substring(iD + 12).Split(';')[0].Length;
            //string strSqlServerName = DBCnStr.Substring(iD + 12, iL);
            //string strNewSqlServerName = GetSqlServerName(cmdText);
            //return DBCnStr.Replace(strSqlServerName, strNewSqlServerName);
        }
        #endregion

        #region GetSqlServerName    由sql string 获取数据库服务器名
        /// <summary>
        /// 由sql string 获取sql server name
        /// </summary>
        /// <param name="cmdText">传入的cmd text</param>
        /// <returns>sql server name</returns>
        private string GetSqlServerName(string cmdText)
        {
            return cmdText.Substring(cmdText.IndexOf("from") + 5).Split('.')[0].ToString();
        }
        #endregion

        # region GetDataSet   通过执行SQL语句返回一个状态
        /// <summary>
        /// 通过执行SQL语句返回一个状态
        /// </summary>
        /// <param name="cmdText">“SQL 文本”</param>
        /// <param name="oCn">"连接对象"</param>
        /// <param name="oDs">"引用的DataSet它将在程序中改变内容"</param>
        /// <returns>"成功则返回0,否则返回错误代码"</returns>
        public int GetDataSet(string cmdText, ref DataSet oDs)
        {
            DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
            SqlConnection oCn = new SqlConnection(DBCnStr);

            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);


                return -1;
            }

            //定义数据适配对象
            SqlDataAdapter oleDataAdapter = new SqlDataAdapter(cmdText, oCn);

            int status = -1;
            try
            {
                //填充DataSet
                oleDataAdapter.Fill(oDs);
                status = 0;
            }
            catch (Exception oErr)
            {
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);
                status = -1;
            }
            finally
            {
                oleDataAdapter = null;
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
            }
            return status;
        }
        #endregion

        # region GetDataTable   执行SQL语句并返回一个表
        /// <summary>
        /// 执行SQL语句并返回一个表
        /// </summary>
        /// <param name="cmdText">SQL文本</param>
        /// <param name="DBCnStr">dbconnect</param>
        /// <param name="inDt">返回表</param>
        /// <returns>成功则返回0,否则返回错误代码</returns>
        public int GetDataTable(string cmdText, ref DataTable inDt)
        {
            DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
            SqlConnection oCn = new SqlConnection(DBCnStr);

            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }

            //建立数据适配对象
            SqlDataAdapter oleDataAdapter = new SqlDataAdapter(cmdText, oCn);

            int status = -1;
            try
            {
                //填充数据表
                oleDataAdapter.Fill(inDt);
                status = 0;
            }
            catch (Exception oErr)
            {
                //异常处理
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                status = -1;
            }
            finally
            {
                oleDataAdapter = null;
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
            }
            return status;
        }
        #endregion

        # region GetDataTable   执行SQL语句并返回一个表
        /// <summary>
        /// 执行SQL语句并返回一个表
        /// </summary>
        /// <param name="cmdText">SQL文本</param>
        /// <param name="DBCnStr">dbconnect</param>
        /// <param name="inDt">返回表</param>
        /// <returns>成功则返回0,否则返回错误代码</returns>
        public int GetCount(string cmdText)
        {
            DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
            SqlConnection oCn = new SqlConnection(DBCnStr);

            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }

            //建立数据适配对象
            SqlDataAdapter oleDataAdapter = new SqlDataAdapter(cmdText, oCn);

            DataTable inDt = new DataTable();
            int status = -1;
            try
            {
                //填充数据表
                oleDataAdapter.Fill(inDt);

                status = inDt.Rows.Count;
            }
            catch (Exception oErr)
            {
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);
                status = -1;
            }
            finally
            {
                oleDataAdapter = null;
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
            }
            return status;
        }
        #endregion

        # region    //  GetNVColl   执行SQL语句并返回NameValueCollection
        ///// <summary>
        ///// 执行SQL语句并返回NameValueCollection
        ///// </summary>
        ///// <param name="cmdText">SQL文本</param>
        ///// <param name="NameValueCollection">nvColl</param>
        ///// <returns>成功则返回0,否则返回错误代码</returns>
        //public int GetNVColl(string cmdText, ref NameValueCollection nvColl)
        //{

        //    DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
        //    SqlConnection oCn = new SqlConnection(DBCnStr);

        //    try
        //    {
        //        oCn.Open();
        //    }
        //    catch (Exception oErr)
        //    {
        //        //WriteFile(oErr.Message);
        //        Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

        //        return -1;
        //    }
        //    //建立数据读取对象
        //    SqlCommand oleCommand = new SqlCommand(cmdText, oCn);
        //    //填充SqlDataReader
        //    SqlDataReader oleReader;

        //    int status = -1;
        //    try
        //    {

        //        oleReader = oleCommand.ExecuteReader();
        //        // Always call Read before accessing data.
        //        while (oleReader.Read())
        //        {
        //            for (int i = 0; i < oleReader.FieldCount; i++)
        //            {
        //                if (oleReader.GetValue(i).ToString() != "")
        //                    nvColl.Add(oleReader.GetName(i), oleReader.GetString(i));
        //            }
        //        }

        //        status = 0;
        //    }
        //    catch (Exception oErr)
        //    {
        //        //异常处理
        //        //WriteFile(oErr.Message);
        //        Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

        //        status = -1;
        //    }
        //    finally
        //    {
        //        oleReader = null;
        //        if (oCn.State == System.Data.ConnectionState.Open)
        //        {
        //            oCn.Close();
        //        }
        //    }
        //    return status;
        //}
        #endregion

        //
        #region GetArrayList     执行SQL语句并返回一个ArrayList
        ///// <summary>
        ///// 执行SQL语句并返回一个ArrayList
        ///// </summary>
        ///// <param name="cmdText">SQL文本</param>
        ///// <returns>返回ArrayList arraylist[i]为name,arraylist[i+1]为value</returns>
        //public ArrayList GetArrayList(string cmdText, ref ArrayList aName, ref ArrayList aValue)
        //{
        //    ArrayList aNameValue = new ArrayList();
        //    SqlConnection oCn = new SqlConnection(DBCnStr);

        //    try
        //    {
        //        oCn.Open();
        //    }
        //    catch (Exception oErr)
        //    {
        //        //WriteFile(oErr.Message);
        //        Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

        //        return null;
        //    }
        //    //建立数据读取对象
        //    SqlCommand oleCommand = new SqlCommand(cmdText, oCn);
        //    //填充SqlDataReader
        //    SqlDataReader oleReader;

        //    ArrayList status = null;
        //    try
        //    {

        //        oleReader = oleCommand.ExecuteReader();
        //        // Always call Read before accessing data.
        //        while (oleReader.Read())
        //        {
        //            for (int i = 0; i < oleReader.FieldCount; i++)
        //            {
        //                if (oleReader.GetValue(i).ToString() != "")
        //                    aName.Add(oleReader.GetName(i));
        //                aValue.Add(oleReader.GetString(i + 1));
        //            }
        //        }

        //        status = aValue;
        //    }
        //    catch (Exception oErr)
        //    {
        //        //异常处理
        //        //WriteFile(oErr.Message);
        //        Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

        //        status = null;
        //    }
        //    finally
        //    {
        //        oleReader = null;
        //        if (oCn.State == System.Data.ConnectionState.Open)
        //        {
        //            oCn.Close();
        //        }
        //    }
        //    return status;
        //}
        #endregion
        //

        #region   GetArrayList   执行SQL语句并返回一个ArrayList
        /// <summary>
        /// 执行SQL语句并返回一个ArrayList
        /// </summary>
        /// <param name="cmdText">SQL文本</param>
        /// <returns>返回ArrayList arraylist[i]为name,arraylist[i+1]为value</returns>
        public int GetArrayList(string cmdText, ref ArrayList aNameValue)
        {
            DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
            SqlConnection oCn = new SqlConnection(DBCnStr);

            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }
            //建立数据读取对象
            SqlCommand oleCommand = new SqlCommand(cmdText, oCn);
            //填充SqlDataReader
            SqlDataReader oleReader;

            int status = -1;
            try
            {

                oleReader = oleCommand.ExecuteReader();
                // Always call Read before accessing data.
                while (oleReader.Read())
                {
                    for (int i = 0; i < oleReader.FieldCount - 1; i ++ )
                    {
                        if (oleReader.GetValue(i).ToString() != "")
                            aNameValue.Add(oleReader.GetName(i));
                    }
                }

                status = 1;
            }
            catch (Exception oErr)
            {
                //异常处理
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                status = -1;
            }
            finally
            {
                oleReader = null;
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
            }
            return status;
        }
        #endregion

        #region   GetASObject   执行SQL语句并返回一个包含多条数据的ASObject (name,value)
        /// <summary>
        /// 执行SQL语句,查询两个字段,并返回一个ASObject
        /// </summary>
        /// <param name="cmdText">SQL文本</param>
        /// <param name="asO">ASObject 对象</param>
        /// <returns>返回int  ASObject[i]为(name,value)</returns>
        public int GetASObjectMulti(string cmdText, ref ASObject asO)
        {
            DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
            SqlConnection oCn = new SqlConnection(DBCnStr);
            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }
            //建立数据读取对象
            SqlCommand oleCommand = new SqlCommand(cmdText, oCn);
            //填充SqlDataReader
            SqlDataReader oleReader;

            int status = -1;
            try
            {
                int i = 1;
                oleReader = oleCommand.ExecuteReader();
                // Always call Read before accessing data.
                while (oleReader.Read())
                {
                    for (int j = 0; j < oleReader.FieldCount; j++)
                    {
                        asO.Add(i+"@"+oleReader.GetName(j),oleReader.GetValue(j));//i@+"name",i为第几条数据的序号
                    }
                    i++;
                }

                status = 1;
            }
            catch (Exception oErr)
            {
                //异常处理
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                status = -1;
            }
            finally
            {
                oleReader = null;
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
            }
            return status;
        }
        #endregion

        #region   GetASObjectSingle   执行SQL语句并返回一个包含单条数据的ASObject (name,value)
        /// <summary>
        /// 执行SQL语句查询一条数据(必须返回一条数据),返回一个ASObject
        /// </summary>
        /// <param name="cmdText">SQL文本</param>
        /// <param name="asO">ASObject 对象</param>
        /// <returns>返回int  ASObject[i]为(name,value)</returns>
        public int GetASObjectSingle(string cmdText, ref ASObject asO)
        {
            DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
            SqlConnection oCn = new SqlConnection(DBCnStr);
            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }
            //建立数据读取对象
            SqlCommand oleCommand = new SqlCommand(cmdText, oCn);
            //填充SqlDataReader
            SqlDataReader oleReader;

            int status = -1;
            try
            {
                //oleReader = oleCommand.ExecuteScalar(); // modified by apenni 2006-5-6
                oleReader = oleCommand.ExecuteReader();
                // Always call Read before accessing data.
                while (oleReader.Read())
                {
                    for (int i = 0; i < oleReader.FieldCount; i++)
                    {
                        asO.Add(oleReader.GetName(i), oleReader.GetValue(i));
                    }
                }

                status = 1;
            }
            catch (Exception oErr)
            {
                //异常处理
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                status = -1;
            }
            finally
            {
                oleReader = null;
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
            }
            return status;
        }
        #endregion

        #region   ExecuteSql    执行SET,DELETE语句时返回影响的行数
        /// <summary>
        /// 执行SET,DELETE语句时返回影响的行数
        /// </summary>
        /// <param name="cmdText">“SQL文本”</param>
        /// <returns>“返回影响的行数,否则返回错误代码”</returns>
        public int ExecuteSql(string cmdText)
        {
            int intReturn = -1;//返回影响的行数。
            SqlCommand oCmd = new SqlCommand();

            DBCnStr = this.InitSqlConnection(DBCnStr, cmdText);
            SqlConnection oCn = new SqlConnection(DBCnStr);
            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }

            oCmd.Connection = oCn;
            oCmd.CommandType = CommandType.Text;
            oCmd.CommandText = cmdText;

            //定义事务 设定隔离级别
            SqlTransaction oTx = oCn.BeginTransaction(IsolationLevel.ReadCommitted);
            oCmd.Transaction = oTx;

            //处理SQL语句
            #region   事务处理
            try
            {
                //支持事务
                intReturn = oCmd.ExecuteNonQuery();
                oTx.Commit();

            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                oTx.Rollback();

                intReturn = -1;

            }
            finally
            {
                oCmd = null;
                oTx = null;
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
            }
            #endregion

            return intReturn;
        }
        #endregion

        #region   ExecuteSql    执行SET,DELETE语句时返回影响的行数
        /// <summary>
        /// 执行SET,DELETE语句时返回影响的行数
        /// </summary>
        /// <param name="cmdText">“SQL文本,支持多sql语句通过';'拼接”</param>
        /// <returns>“返回影响的行数,否则返回错误代码”</returns>
        public int ExecuteSql(params string[] cmdText)
        {
            string strSql = string.Empty;
            foreach (string strCmd in cmdText)
            {
                strSql += strCmd;
            }
            return ExecuteSql(strSql);
        }
        //added by apenni 2006-5-6
        #endregion

        #region   CallStoreProc   调用系统存储过程返回一个整数
        /// <summary>
        /// 调用系统存储过程返回一个整数
        /// </summary>
        /// <param name = "strSysSPName">“存储过程枚举类型”</param>
        /// <param name="InParaName">"in参数名字"</param>
        /// <param name = "ParamValue">“参数列表”</param>
        /// <param name="OutParaName">"out参数名字"</param>
        /// <param name="OutParaValue">"返回的参数值"</param>
        /// <param name="IType">"out参数的类型"</param>
        /// <returns>"成功则返回所影响的行数,否则返回-1"</returns>
        public int CallStoreProc(string strSysSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType)
        {
            int inReturn = -1;


            SqlCommand oCmd = new SqlCommand();

            oCmd.CommandText = strSysSPName;
            oCmd.CommandType = CommandType.StoredProcedure;

            #region in参数的建立
            if (InParamValue != null && InParaName != null)
            {
                //建立in参数
                for (int i = 0; i < InParamValue.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (InParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]);
                        oPara.Direction = ParameterDirection.Input;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }
            #endregion

            #region out参数的建立

            if (OutParaName != null && OutParaValue != null && IType != null)
            {
                //建立in参数
                for (int i = 0; i < OutParaName.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (OutParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString());
                        oPara.Direction = ParameterDirection.Output;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }

            #endregion

            SqlConnection oCn = new SqlConnection(DBCnStr);
            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);
                return -1;
            }

            oCmd.Connection = oCn;

            //连接数据库和执行存储过程
            try
            {
                inReturn = oCmd.ExecuteNonQuery();
                for (int i = 0; i < OutParaValue.Length; i++)
                {
                    OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value;
                }
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                inReturn = -1;
            }
            finally
            {
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
                oCmd = null;
            }
            return inReturn;
        }
        #endregion

        #region   CallStoreProc   调用系统存储过程并影响生成一个object对象值
        /// <summary>
        /// 调用系统存储过程并影响生成一个object对象值
        /// </summary>
        /// <param name = "strSysSPName">“存储过程枚举类型”</param>
        /// <param name="InParaName">"in参数名字"</param>
        /// <param name = "InParamValue">“in参数列表”</param>
        /// <param name="OutParaName">"out参数名字"</param>
        /// <param name="OutParaValue">"out参数值"</param>
        /// <param name="IType">"out参数的类型"</param>
        /// <param name="inObject">"引用的值"</param>
        /// <returns>成功则返回1,否则返回-1或错误代码</returns>
        public int CallStoreProc(string strSysSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType, ref object objReturn)
        {
            //建立Command对象
            SqlCommand oCmd = new SqlCommand();

            oCmd.CommandText = strSysSPName.ToString();
            oCmd.CommandType = CommandType.StoredProcedure;

            int status = -1;

            #region in参数的建立
            if (InParamValue != null && InParaName != null)
            {
                //建立in参数
                for (int i = 0; i < InParamValue.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (InParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]);
                        oPara.Direction = ParameterDirection.Input;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }
            #endregion

            #region out参数的建立

            if (OutParaName != null && OutParaValue != null && IType != null)
            {
                //建立in参数
                for (int i = 0; i < OutParaName.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (OutParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString());
                        oPara.Direction = ParameterDirection.Output;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }

            #endregion

            SqlConnection oCn = new SqlConnection(DBCnStr);
            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }

            oCmd.Connection = oCn;

            //连接数据库和执行存储过程
            try
            {
                //通过SqlDataAdapter来填充Table
                objReturn = oCmd.ExecuteScalar();
                #region 取得返回参数的值

                for (int i = 0; i < OutParaValue.Length; i++)
                {
                    OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value;
                }

                #endregion
                status = 0;
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                status = -1;
            }
            finally
            {
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
                oCmd = null;
            }
            return status;
        }
        #endregion
      
        #region    CallStoreProc    调用用户存储过程返回一个DataTable(Select 语句)
        /// <summary>
        /// 调用用户存储过程返回一个DataTable(Select 语句)
        /// </summary>
        /// <param name = "strSPName">“存储过程名”</param>
        /// <param name="InParaName">"in参数名字"</param>
        /// <param name = "InParamValue">“in参数列表”</param>
        /// <param name="OutParaName">"out参数名字"</param>
        /// <param name="IType">"out参数的类型"</param>
        /// <param name="OutParaValue">"out参数值"</param>
        /// <param name="oDT">"传入的DataTable引用"</param>
        ///<returns>"成功则返回1,否则返回-1或错误代码"</returns>
        public int CallStoreProc(string strSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType, ref DataTable oDT)
        {

            //建立Command对象
            SqlCommand oCmd = new SqlCommand();

            oCmd.CommandText = strSPName.ToString();
            oCmd.CommandType = CommandType.StoredProcedure;

            int status = -1;

            #region in参数的建立
            if (InParamValue != null && InParaName != null)
            {
                //建立in参数
                for (int i = 0; i < InParamValue.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (InParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]);
                        oPara.Direction = ParameterDirection.Input;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }
            #endregion

            #region out参数的建立

            if (OutParaName != null && OutParaValue != null && IType != null)
            {
                //建立in参数
                for (int i = 0; i < OutParaName.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (OutParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString());
                        oPara.Direction = ParameterDirection.Output;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }

            #endregion

            SqlConnection oCn = new SqlConnection(DBCnStr);
            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }

            oCmd.Connection = oCn;

            //连接数据库和执行存储过程
            try
            {
                //通过SqlDataAdapter来填充Table

                SqlDataAdapter oDp = new SqlDataAdapter(oCmd.CommandText.ToString(), oCn);

                //建立SqlDataAdapter与SqlCommand的连接
                oDp.SelectCommand = oCmd;
                oDp.DeleteCommand = oCmd;
                oDp.UpdateCommand = oCmd;
                oDp.DeleteCommand = oCmd;

                //填充DataTable
                oDp.Fill(oDT);
                #region 取得返回参数的值

                for (int i = 0; i < OutParaValue.Length; i++)
                {
                    OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value;
                }

                #endregion
                status = 0;
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                status = -1;
            }
            finally
            {
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
                oCmd = null;
            }
            return status;
        }
        #endregion

        #region   CallStoreProc    调用系统存储过程并影响生成一个DataSet对象
        /// <summary>
        /// 调用系统存储过程并影响生成一个DataSet对象
        /// </summary>
        /// <param name = "strSysSPName">“存储过程枚举类型”</param>
        /// <param name="InParaName">"in参数名字"</param>
        /// <param name = "InParamValue">“in参数列表”</param>
        /// <param name="OutParaName">"out参数名字"</param>
        /// <param name="OutParaValue">"out参数值"</param>
        /// <param name="IType">"out参数的类型"</param>
        /// <param name=" oDs">"引用的DataSet"</param>
        /// <returns>成功则返回1,否则返回-1或错误代码</returns>
        public int CallStoreProc(string strSysSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType, ref DataSet oDs)
        {
            SqlCommand oCmd = new SqlCommand();

            oCmd.CommandText = strSysSPName;
            oCmd.CommandType = CommandType.StoredProcedure;

            int status = -1;

            #region in参数的建立
            if (InParamValue != null && InParaName != null)
            {
                //建立in参数
                for (int i = 0; i < InParamValue.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (InParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]);
                        oPara.Direction = ParameterDirection.Input;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }
            #endregion

            #region out参数的建立

            if (OutParaName != null && OutParaValue != null && IType != null)
            {
                //建立in参数
                for (int i = 0; i < OutParaName.Count; i++)
                {
                    SqlParameter oPara = new SqlParameter();

                    //调用SQLParamHelper的CreateParameterWithValue()方法来生成不同的参数
                    if (OutParaName[i] != null)
                    {
                        oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString());
                        oPara.Direction = ParameterDirection.Output;
                        oCmd.Parameters.Add(oPara);
                    }
                }
            }

            #endregion

            SqlConnection oCn = new SqlConnection(DBCnStr);
            try
            {
                oCn.Open();
            }
            catch (Exception oErr)
            {
                //WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                return -1;
            }

            oCmd.Connection = oCn;

            //连接数据库和执行存储过程
            try
            {
                //通过SqlDataAdapter来填充Table
                SqlDataAdapter oDp = new SqlDataAdapter(oCmd.CommandText.ToString(), oCn);

                //建立SqlDataAdapter与SqlCommand的连接
                oDp.SelectCommand = oCmd;
                oDp.DeleteCommand = oCmd;
                oDp.UpdateCommand = oCmd;
                oDp.DeleteCommand = oCmd;
                //
                oDp.Fill(oDs);
                #region 取得返回参数的值
                for (int i = 0; i < OutParaValue.Length; i++)
                {
                    OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value;
                }
                #endregion
                status = 0;
            }
            catch (Exception oErr)
            {

                // WriteFile(oErr.Message);
                Errlog.AppLog(oErr.Message, ErrorType.MviDataBase);

                status = -1;
            }
            finally
            {
                if (oCn.State == System.Data.ConnectionState.Open)
                {
                    oCn.Close();
                }
                oCmd = null;
            }
            return status;
        }
        #endregion

        #region     GetSqlWhere  产生SQL语句
        /// <summary>
        /// 产生SQL语句
        /// </summary>
        /// <param name="InName">表字段名</param>
        /// <param name="InValue">表字段值</param>
        /// <returns>结果SQL语句</returns>
        public string GetSqlWhere(ArrayList InName, ArrayList InValue)
        {
            DataTable DataTableTmp = new DataTable();
            string StrSqlWhereTmp = "";
            string StrTmp = "";
            string StrName = "";
            string StrValue = "";

            if (InName == null || InValue == null)
            {
                return null;
            }
            for (int i = 0; i < InName.Count; i++)
            {
                StrTmp = InName[i].ToString();
                if (StrTmp.Substring(0, 2) == "#S") //开始时间
                {
                    StrName = StrTmp.Substring(2) + " >= ";
                    StrValue = "to_date('" + InValue[i].ToString() + "','yyyy-mm-dd HH24:Mi:ss')";
                }
                else if (StrTmp.Substring(0, 2) == "#E")//结束时间
                {
                    StrName = StrTmp.Substring(2) + " < ";
                    StrValue = "to_date('" + InValue[i].ToString() + "','yyyy-mm-dd HH24:Mi:ss')";
                }
                else if (StrTmp.Substring(0, 2) == "#N")//<>条件
                {
                    StrName = StrTmp.Substring(2) + " <> ";
                    StrValue = InValue[i].ToString();
                }
                else if (StrTmp.Substring(0, 2) == "#D")//大于条件
                {
                    StrName = StrTmp.Substring(2) + ">";
                    StrValue = InValue[i].ToString();
                }
                else if (StrTmp.Substring(0, 2) == "#X")//小于条件
                {
                    StrName = StrTmp.Substring(2) + "<";
                    StrValue = InValue[i].ToString();
                }
                else if (StrTmp.Substring(0, 2) == "#I")//IN条件
                {
                    StrName = StrTmp.Substring(2) + " IN (";
                    StrValue = InValue[i].ToString() + ")";
                }
                else if (StrTmp.Substring(0, 2) == "#0")//没有条件
                {
                    return InValue[i].ToString();
                }
                else        //等于条件
                {
                    StrName = StrTmp + "=";
                    StrValue = InValue[i].ToString();
                }

                StrSqlWhereTmp = StrSqlWhereTmp + StrName + StrValue + " and ";
            }

            StrSqlWhereTmp = StrSqlWhereTmp.Substring(0, StrSqlWhereTmp.Length - 5);
            return StrSqlWhereTmp;
        }
        #endregion
    }
    #endregion
  
    #region    class SQLParamHelper
    /// <summary>
    /// SQLParamHelper
    /// </summary>
    internal class SQLParamHelper
    {
        #region 创建出入参数
        /// <summary>
        /// 根据输入的OBJECT对象生成不同的参数
        /// </summary>
        /// <param name="name">“参数名字”</param>
        /// <param name="nValue">“参数值”</param>
        /// <returns></returns>
        public static SqlParameter CreateParameterWithValue(string name, object nValue)
        {
            string strType;
            SqlParameter param;
            int intLenth = 0;

            if (nValue != null)
            {
                strType = nValue.GetType().ToString();
                intLenth = nValue.ToString().Trim().Length;
                if (intLenth > 0)
                {
                    switch (strType)
                    {
                        case "System.Int32":
                            {
                                param = new SqlParameter(name, SqlDbType.BigInt, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Double":
                            {
                                param = new SqlParameter(name, SqlDbType.Decimal);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Single":
                            {
                                param = new SqlParameter(name, SqlDbType.Float);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.UInt64":
                            {
                                param = new SqlParameter(name, SqlDbType.BigInt, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Int64":
                            {
                                param = new SqlParameter(name, SqlDbType.BigInt, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Decimal":
                            {
                                param = new SqlParameter(name, SqlDbType.Decimal, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Object":
                            {
                                param = new SqlParameter(name, SqlDbType.Real, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.UInt16":
                            {
                                param = new SqlParameter(name, SqlDbType.BigInt, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Int16":
                            {
                                param = new SqlParameter(name, SqlDbType.BigInt, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Boolean":
                            {
                                param = new SqlParameter(name, SqlDbType.Binary);
                                param.Direction = ParameterDirection.Input;
                                bool bolTemp = (bool)nValue;
                                param.Value = (bolTemp == true ? 1 : 0);
                                break;
                            }
                        case "System.String":
                            {
                                param = new SqlParameter(name, SqlDbType.VarChar, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.DateTime":
                            {
                                param = new SqlParameter(name, SqlDbType.DateTime, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Char":
                            {
                                param = new SqlParameter(name, SqlDbType.Char, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.SByte":
                            {
                                param = new SqlParameter(name, SqlDbType.Bit, intLenth);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System_XMl":
                            {
                                param = new SqlParameter(name, SqlDbType.Xml, 300);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        case "System.Text":
                            {
                                if (intLenth < 2000)
                                {
                                    param = new SqlParameter(name, SqlDbType.Text, intLenth);
                                }
                                else
                                {
                                    param = new SqlParameter(name, SqlDbType.Text);
                                }
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                        default:
                            {
                                param = new SqlParameter(name, SqlDbType.Variant);
                                param.Direction = ParameterDirection.Input;
                                param.Value = nValue;
                                break;
                            }
                    }
                    param.Direction = ParameterDirection.Input;
                }
                else
                {
                    param = new SqlParameter(name, SqlDbType.VarChar, 10);
                    param.Direction = ParameterDirection.Input;
                    param.Value = "";
                }
            }
            else
            {
                param = new SqlParameter(name, SqlDbType.Variant);
                param.Direction = ParameterDirection.Input;
                param.Value = null;
            }
            return param;

        }
        #endregion

        #region    CreateOutParameterWithValue    建立输出参数
        /// <summary>
        /// 建立输出参数
        /// </summary>
        /// <param name="name">"参数名"</param>
        /// <param name="objType">"参数类型"</param>
        /// <returns></returns>
        public static SqlParameter CreateOutParameterWithValue(string name, string objType)
        {
            string strType = objType;

            SqlParameter param;

            switch (strType)
            {
                case "System_Object":
                    {
                        param = new SqlParameter(name, SqlDbType.Variant);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Single":
                    {
                        param = new SqlParameter(name, SqlDbType.Float);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_UInt64":
                    {
                        param = new SqlParameter(name, SqlDbType.BigInt);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Int64":
                    {
                        param = new SqlParameter(name, SqlDbType.BigInt);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Int32":
                    {
                        param = new SqlParameter(name, SqlDbType.Int);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_UInt16":
                    {
                        param = new SqlParameter(name, SqlDbType.SmallInt);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Int16":
                    {
                        param = new SqlParameter(name, SqlDbType.SmallInt);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Double":
                    {
                        param = new SqlParameter(name, SqlDbType.Float);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Decimal":
                    {
                        param = new SqlParameter(name, SqlDbType.Decimal);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Boolean":
                    {
                        param = new SqlParameter(name, SqlDbType.Binary);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_String":
                    {
                        param = new SqlParameter(name, SqlDbType.VarChar, 200);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_DateTime":
                    {
                        param = new SqlParameter(name, SqlDbType.DateTime);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Char":
                    {
                        param = new SqlParameter(name, SqlDbType.Char, 100);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_SByte":
                    {
                        param = new SqlParameter(name, SqlDbType.NChar, 30);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_Text":
                    {
                        param = new SqlParameter(name, SqlDbType.Text, 300);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                case "System_XMl":
                    {
                        param = new SqlParameter(name, SqlDbType.Xml, 300);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
                default:
                    {
                        param = new SqlParameter(name, SqlDbType.Variant);
                        param.Direction = ParameterDirection.Output;
                        break;
                    }
            }
            return param;

        }
        #endregion CreateOutParams
   
        #region CreateParameter    创建形式参数
        /// <summary>
        /// 转换参数为SQL语句的表达式
        /// </summary>
        /// <param name="nValue">传入的Object类型值</param>
        /// <returns>已经转换好的String</returns>
        public static string CreateParameter(SqlParameter oValue)
        {
            string strTemPara;
            object oPara_Value = oValue.Value;

            if (oPara_Value != null)
            {
                string strType = oValue.SqlDbType.ToString();
                switch (strType)
                {
                    case "VarChar":
                        {
                            strTemPara = "'" + CheckMark(oPara_Value) + "'";
                            break;
                        }
                    case "Char":
                        {
                            strTemPara = "'" + CheckMark(oPara_Value) + "'";
                            break;
                        }
                    case "NChar":
                        {
                            strTemPara = "'" + CheckMark(oPara_Value) + "'";
                            break;
                        }
                    case "NVarChar":
                        {
                            strTemPara = "'" + CheckMark(oPara_Value) + "'";
                            break;
                        }
                    //日期型
                    case "DateTime":
                        {
                            DateTime dt = new DateTime();
                            dt = (DateTime)oPara_Value;

                            string strTP = "'" + dt.Year + "-" + dt.Month + "-" + dt.Day;
                            strTP += " " + dt.Hour.ToString() + ":" + dt.Minute.ToString();
                            strTP += ":" + dt.Second.ToString() + "',";
                            strTemPara = "TO_DATE(" + strTP + "'yyyy-mm-dd hh24:mi:ss'" + ")";
                            break;
                        }
                    case "LongVarChar":
                        {
                            strTemPara = "'" + CheckMark(oPara_Value) + "'";
                            break;
                        }
                    case "Clob":
                        {
                            strTemPara = "'" + CheckMark(oPara_Value) + "'";
                            break;
                        }
                    default:
                        {
                            strTemPara = oPara_Value.ToString();
                            break;
                        }
                }
            }
            else
            {
                //将null传入
                strTemPara = "null";
            }
            return strTemPara;
        }
        #endregion

        #region   CheckMark   替换object的'为''并转换为String
        /// <summary>
        /// 替换object的'为''并转换为String
        /// </summary>
        /// <param name="objIn">传入的Object类型</param>
        /// <returns>已经替换'为''的String</returns>
        private static string CheckMark(object objIn)
        {
            string strTmp = objIn.ToString();

            return strTmp.Replace("'", "''");  // modified by apenni 06.01.02

            //string strRet = "";
            //for (int i = 0; i < strTmp.Length; i++)
            //{
            //    if (strTmp[i].ToString() == "'")
            //    {
            //        strRet += "''";
            //    }
            //    else
            //    {
            //        strRet += strTmp[i].ToString();
            //    }
            //}
            //return strRet;
        }
        #endregion
    }
    #endregion