C#數據庫操作類

/*
*                                                                說明
* 功能說明:數據訪問封裝。所有數據都要通過這個類定義的dbConnection訪問數據庫。同時,定義了通用的cmd,以及cmd常用的訪問存儲過程的方法RunPro
*    
*    
* 作者: RogerWang
*    
* 創建日期:2006-02-15
*    
*/


using System;
using System.Data;
using System.Data.SqlClient;


namespace insurer
{
  /// <summary>
  /// DataAccess 的摘要說明。
  /// </summary>
  public class DataAccess
  {
    private readonly string SQLCONNECTSTR = "server=(local);uid=sa;pwd=lwrong;database=insurer";
    private SqlConnection dbConnection;
    private readonly string RETUENVALUE = "RETURNVALUE";    


    //判斷要不要啓動事務
                private bool startrans = false;

    //爲解決多筆數據導入的問題,特添加的事務處理屬性
    private SqlTransaction trans = null;

                
    //定義是否啓動事務屬性
    public bool StartTrans
    {
      get
      {
        return startrans;
      }
      set
      {
        startrans = value;
      }
    }


    //定義事務
    public SqlTransaction Trans
    {
      get
      {
        return trans;
      }
      set
      {
        if (value != null)
        {
          trans = value;
        }
      }
    }

    //創建打開dbConnection對象
    public void OpenConnection()
    {
      if ( dbConnection == null )
      {
        dbConnection = new SqlConnection(SQLCONNECTSTR);
      }

      if ( dbConnection.State == ConnectionState.Closed )
      {
        try
        {
          dbConnection.Open();
        }
        catch(Exception ex)
        {
          SystemError.SystemLog(ex.Message);
        }
        finally
        {
        }
      }
    }

    //釋放dbConnection對象
    public void CloseConnection()
    {
      if (dbConnection != null)
      {
        if (dbConnection.State == ConnectionState.Open)
        {
          dbConnection.Dispose();
          dbConnection = null;
        }
      }
    }


    //

    //創建cmd,注意dbconnection在該函數中創建,但沒有在這函數中釋放。
    //在正確的面向對象設計方法中,對象應該是誰創建,誰就應該負責釋放。按這個觀點,這個過程有些不安全!!!!
        private SqlCommand CreateCommand(string ProName,SqlParameter[] prams)
    {
      OpenConnection();
      SqlCommand cmd = new SqlCommand(ProName,dbConnection);
      cmd.CommandType = CommandType.StoredProcedure;


      //如果進行事務處理,那麼對cmd的Transaction的事務賦值
      if (StartTrans)
      {
        cmd.Transaction = Trans;
      }


      if ( prams != null)
      {
        foreach(SqlParameter parameter in prams)
        {
          cmd.Parameters.Add(parameter);
        }
      }

      //cmd.Parameters.Add(

      return cmd;

    }


    /// <summary>
    /// 創建cmd,並執行相應的操作。 然後釋放cmd!
    ///    
    /// 該函數是執行cmd沒有返回值,且沒有參數的方法。
    /// </summary>
    /// <param name="ProName"></param>
    public bool RunProc(string ProName)
    {
      SqlCommand cmd = CreateCommand(ProName,null);

      bool k = false;
      try
      {
        k = (bool)cmd.ExecuteScalar();
      }
      catch(Exception ex)
      {
        SystemError.SystemLog(ex.Message);
      }
      finally
      {
        cmd.Dispose();
      }
      return k;

    }

    /// <summary>
    /// 創建cmd,並執行相應的操作。 然後釋放cmd!
    ///    
    /// 該函數是執行cmd沒有返回值,但有參數的方法。
    /// </summary>
    /// <param name="ProName"></param>
    /// <param name="prams"></param>
    public bool RunProc(string ProName,SqlParameter[] prams)
    {
      SqlCommand cmd = CreateCommand(ProName,prams);

      bool k = false;
      try
      {
        k = (bool) cmd.ExecuteScalar();
      }
      catch(Exception ex)
      {
        SystemError.SystemLog(ex.Message);
      }
      finally
      {    
        cmd.Dispose();
        //Close();
      }
      return k;
    }

    /// <summary>
    /// 創建cmd,並執行相應的操作。 然後釋放cmd!
    ///    
    /// 該函數是執行cmd帶有返回值,但沒有參數的方法。    
    /// </summary>
    /// <param name="ProName"></param>
    /// <param name="dataReader"></param>
    public void RunProc(string ProName,out SqlDataReader dataReader)
    {
      SqlCommand cmd = CreateCommand(ProName,null);
      dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      try
      {
        
      }
      catch(Exception ex)
      {
        SystemError.SystemLog(ex.Message);
      }
      finally
      {
        cmd.Dispose();
      }
    }

    /// <summary>
                /// 創建cmd,並執行相應的操作。 然後釋放cmd!
    ///    
    /// 該函數是執行cmd帶有返回值,且有參數的方法。
    /// </summary>
    /// <param name="ProName"></param>
    /// <param name="prams"></param>
    /// <param name="dataReader"></param>
    public void RunProc(string ProName,SqlParameter[] prams,out SqlDataReader dataReader)
    {
      SqlCommand cmd = CreateCommand(ProName,prams);
      dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      try
      {
        
      }
      catch(Exception ex)
      {
        SystemError.SystemLog(ex.Message);
      }
      finally
      {
        cmd.Dispose();
      }
    }


    /// <summary>
    /// 創建cmd的參數
    /// 該方法的思路就是按條件生成一個SqlParameter對象。
    /// 生成對象後,再給對象賦相應的返回值類型
    /// </summary>
    /// <param name="ParamName"></param>
    /// <param name="DbType"></param>
    /// <param name="size"></param>
    /// <param name="direction"></param>
    /// <param name="Value"></param>
    /// <returns></returns>
    public SqlParameter CreateParam(string ParamName, SqlDbType DbType, int size,ParameterDirection direction,object Value)
    {
      SqlParameter param;

      if (size > 0)
      {
        param = new SqlParameter(ParamName,DbType,size);
      }
      else
      {
        param = new SqlParameter(ParamName,DbType);
      }

      param.Direction = direction;

      param.Value = Value;

      return param;
    }

    /// <summary>
    /// 創建cmd的輸入參數
    /// </summary>
    /// <param name="ParamName"></param>
    /// <param name="DbType"></param>
    /// <param name="size"></param>
    /// <param name="Value"></param>
    /// <returns></returns>
    public SqlParameter CreateInParam(string ParamName, SqlDbType DbType, int size, object Value)
    {
      return CreateParam(ParamName,DbType,size,ParameterDirection.Input,Value);
    }

    /// <summary>
    /// 創建cmd的輸出參數
    /// </summary>
    /// <param name="ParamName"></param>
    /// <param name="DbType"></param>
    /// <param name="size"></param>
    /// <returns></returns>
    public SqlParameter CreateOutParam(string ParamName, SqlDbType DbType, int size)
    {
      return CreateParam(ParamName,DbType,size,ParameterDirection.Output,null);
    }

    /// <summary>
    /// 創建cmd帶有返回值的參數
    /// </summary>
    /// <param name="ParamName"></param>
    /// <param name="DbType"></param>
    /// <param name="size"></param>
    /// <returns></returns>
    public SqlParameter CreateReturnParam(string ParamName,SqlDbType DbType, int size)
    {
      return CreateParam(ParamName,DbType,size,ParameterDirection.ReturnValue,null);
    }


    //開始一個事務
    public void BeginTrans()
    {
      OpenConnection();

      Trans = dbConnection.BeginTransaction(IsolationLevel.Serializable);
    }


    public void Commit()
    {
      if (Trans != null)
      {
        Trans.Commit();
      }
    }

    public void Rollback()
    {
      if (Trans != null)
      {
        Trans.Rollback();
      }
    }
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章