C#操作SQL Server数据库通用类

来源:互联网 发布:淘宝网店装修图片尺寸 编辑:程序博客网 时间:2024/04/24 17:31
  在前段时间写的文章<< C#中读取文本文件导入SQL数据库解决方法>>一文中,文章链接:[url]http://alligator.blog.51cto.com/36993/102446[/url]。描述了如何处理具有固定格式文本文件的处理方式,并提供了操作文本文件的源代码供参考。有朋友通过留言希望提供数据操作类,本想重新整理后再放上来,但最近事情太多,精力有限,直接把源码放上来,有兴趣的朋友请参考!
      
/*
*                                                                说明
* 功能说明:数据访问封装。所有数据都要通过这个类定义的dbConnection访问数据库。同时,定义了通用的cmd,以及cmd常用的访问存储过程的方法RunPro
*    
*    
* 作者: RogerWang
*    
* 创建日期:2006-02-15
*    
*/


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


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


    //判断要不要启动事务
                privatebool startrans = false;

    //为解决多笔数据导入的问题,特添加的事务处理属性
    private SqlTransaction trans =null;

                
    //定义是否启动事务属性
    publicbool StartTrans
    {
      get
      {
        return startrans;
      }
      set
      {
        startrans = value;
      }
    }


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

    //创建打开dbConnection对象
    publicvoid 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对象
    publicvoid 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 parameterin prams)
        {
          cmd.Parameters.Add(parameter);
        }
      }

      //cmd.Parameters.Add(

      return cmd;

    }


    /// <summary>
    /// 创建cmd,并执行相应的操作。 然后释放cmd!
    ///    
    /// 该函数是执行cmd没有返回值,且没有参数的方法。
    /// </summary>
    /// <param name="ProName"></param>
    publicbool 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>
    publicbool 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>
    publicvoid 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>
    publicvoid 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);
    }


    //开始一个事务
    publicvoid BeginTrans()
    {
      OpenConnection();

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


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

    publicvoid Rollback()
    {
      if (Trans !=null)
      {
        Trans.Rollback();
      }
    }
  }
}

本文出自 “我儿子真帅!” 博客,转载请与作者联系!

原创粉丝点击