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

本文介绍了一个用于数据访问的封装类,确保所有数据库操作通过统一接口进行,支持存储过程调用及参数传递。同时,文章详细阐述了如何在.NET环境中使用SqlConnection和SqlCommand进行数据库连接管理和事务处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

ContractedBlock.gif ExpandedBlockStart.gif Code
/* 
 *                                                                说明 
 * 功能说明:数据访问封装。所有数据都要通过这个类定义的dbConnection访问数据库。同时,定义了通用的cmd,以及cmd常用的访问存储过程的方法RunPro 
 *    
 *     
 *    
 
*/ 
 
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(); 
      } 
    } 
  } 
}

转载于:https://www.cnblogs.com/mgod/archive/2008/12/21/1359178.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值