通用的数据库处理类,通过ADO.NET与数据库连接(存储过程)

本文介绍了一个通用的数据库处理类,该类通过ADO.NET实现数据库连接管理,并提供了多种执行存储过程的方法,包括参数传递、结果集读取等功能。

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

 using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections;

/// <summary>
/// 通用的数据库处理类,通过ADO.NET与数据库连接
/// </summary>
public class DataBase
{
 #region 定义con连接变量
 private SqlConnection con;
    private readonly string SQLCONNECTIONSTRING = ConfigurationSettings.AppSettings["SqlConnectionString"].ToString();
    #endregion

    #region 打开数据库连接
    /// <summary>
    /// 打开数据库连接
    /// </summary>
    public void Open ()
    {
        //打开数据库连接
        if ( con == null )
        {
            con = new SqlConnection ( SQLCONNECTIONSTRING );
        }

        if ( con.State == ConnectionState.Closed )
        {
            try
            {
                //打开数据库连接
                con.Open ();
            }
            catch ( Exception e )
            {
                //执行错误时,写入日志
                SystemError.SystemLog ( e.Message );
            }
        }
    }
    #endregion

 #region 关闭数据库连接
 /// <summary>
 /// 关闭数据库连接
 /// </summary>
 public void Close()
 {
  //判断连接是否已经创建
  if(con != null)
  {
   //判断连接的状态是否打开
   if(con.State == ConnectionState.Open)
   {
    con.Close();
   }
  }
 }
 #endregion

 #region 释放资源
 /// <summary>
 /// 释放资源
 /// </summary>
 public void Dispose()
 {
  //确认连接是否已经关闭
  if(con != null)
  {
   con.Dispose();
   con = null;
  }
 }
 #endregion

 #region 执行存储过程-1
 ///<summary>
 /// 执行存储过程
 /// </summary>
 /// <param name="procName">存储过程的名称</param>
 /// <returns>返回整数</returns>
 public int RunProc(string procName)
 {
  SqlCommand cmd = CreateCommand(procName,null);

  try
  {
   //执行数据库操作
   cmd.ExecuteNonQuery();
  }
  catch(Exception e)
  {
            throw e;
  }

  Close();
  return (int)cmd.Parameters["ReturnValue"].Value;
 }
 #endregion

 #region 执行存储过程-2
 ///<summary>
 /// 执行存储过程
 /// </summary>
 /// <param name="procName">存储过程的名称</param>
 /// <param name="prams">存储过程所需参数</param>
 /// <returns>返回整数</returns>
 public int RunProc(string procName,SqlParameter[] prams)
 {
  SqlCommand cmd = CreateCommand(procName, prams);

  try
  {
   //执行数据库操作
   cmd.ExecuteNonQuery();
  }
  catch(Exception e)
  {
            throw e;
  }

  Close();
  return (int)cmd.Parameters["ReturnValue"].Value;
 }
    #endregion

    #region 执行存储过程-3
    ///<summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程的名称</param>
    /// <param name="dataReader">返回存储过程返回值</param>
    public void RunProc ( string procName , out DataTableReader tableReader )
    {
        SqlCommand cmd = CreateCommand ( procName , null );

        //执行数据库操作
        SqlDataReader dataReader = cmd.ExecuteReader ( CommandBehavior.CloseConnection );
        DataTable dt = new DataTable ();
        dt.Clear ();
        dt = SystemTools.ConvertDataReaderToDataTable ( dataReader );
        DataSet ds = new DataSet ();
        ds.Tables.Add ( dt );
        dataReader.Close ();
        dataReader.Dispose ();
        this.Close ();
        this.Dispose ();
        tableReader = ds.CreateDataReader ();
    }
    #endregion

    #region 执行存储过程-4
    ///<summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程的名称</param>
    /// <param name="prams">存储过程所需参数</param>
    /// <param name="dataReader">返回存储过程返回值</param>
    public void RunProc ( string procName , SqlParameter [] prams ,
                        out DataTableReader tableReader )
    {
        SqlCommand cmd = CreateCommand ( procName , prams );

        //执行数据库操作
        SqlDataReader dataReader = cmd.ExecuteReader ( CommandBehavior.CloseConnection );
        DataTable dt = null;
        dt = SystemTools.ConvertDataReaderToDataTable ( dataReader );
        DataSet ds = new DataSet ();
        ds.Tables.Add ( dt );
        dataReader.Close ();
        dataReader.Dispose ();
        this.Close ();
        this.Dispose ();
        tableReader = ds.CreateDataReader ();
    }
    #endregion

 #region 执行存储过程-5
 ///<summary>
 /// 执行存储过程
 /// </summary>
 /// <param name="procName">存储过程的名称</param>
 /// <param name="prams">存储过程所需参数</param>
 /// <param name="state">状态</param>
 public void RunProc(string procName,SqlParameter[] prams,bool state)
 {
  SqlCommand cmd = CreateCommand(procName, prams);

  try
  {
   //执行数据库操作
   cmd.ExecuteNonQuery();
  }
  catch(Exception e)
        {
            throw e;
  }

  Close();
 }
 #endregion

 #region CreateCommand:执行存储过程
 ///<summary>
 /// CreateCommand:执行存储过程
 /// </summary>
 /// <param name="procName">存储过程的名称</param>
 /// <param name="prams">存储过程所需参数</param>
 /// <returns>返回SqlCommand对象</returns>
 private SqlCommand CreateCommand(string procName,SqlParameter[] prams)
 {
  //确认连接已经打开
  Open();

  SqlCommand cmd = new SqlCommand(procName,con);
  cmd.CommandType = CommandType.StoredProcedure;

  //依次把参数传入存储过程
  if(prams != null)
  {
   foreach(SqlParameter parameter in prams)
   {
    cmd.Parameters.Add(parameter);
   }
  }

  //加入返回参数
  cmd.Parameters.Add(
   new SqlParameter("ReturnValue",SqlDbType.Int,4,
        ParameterDirection.ReturnValue,
        false,0,0,string.Empty,
        DataRowVersion.Default,null));

  //返回创建的SqlCommand对象
  return cmd;
 }
 #endregion

 #region CreateParam:生成存储过程参数
 /// <summary>
 /// 生成存储过程参数
 /// </summary>
 /// <param name="ParamName">存储过程名称</param>
 /// <param name="DbType">参数类型</param>
 /// <param name="Size">参数大小</param>
 /// <param name="Direction">参数方向</param>
 /// <param name="Value">参数值</param>
 /// <returns>新的 parameter 对象</returns>
 public SqlParameter CreateParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
 {
  SqlParameter param;

  //当参数大小为0时,不使用该参数大小值
  if(Size > 0)
  {
   param = new SqlParameter(ParamName, DbType, Size);
  }
  else
  {
   //当参数大小为0时,不使用该参数大小值
   param = new SqlParameter(ParamName, DbType);
  }

  //创建输出类型的参数
  param.Direction = Direction;
  if (!(Direction == ParameterDirection.Output && Value == null))
  {
   param.Value = Value;
  }

  //返回创建的参数
  return param;
 }
 #endregion

 #region CreateInParam:传入输入参数
 /// <summary>
 /// 传入输入参数
 /// </summary>
 /// <param name="ParamName">存储过程名称</param>
 /// <param name="DbType">参数类型</param></param>
 /// <param name="Size">参数大小</param>
 /// <param name="Value">参数值</param>
 /// <returns>新的 parameter 对象</returns>
 public SqlParameter CreateInParam(string ParamName, SqlDbType DbType, int Size, object Value)
 {
  return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
 }
 #endregion

 #region CreateOutParam:传入返回值参数
 /// <summary>
 /// 传入返回值参数
 /// </summary>
 /// <param name="ParamName">存储过程名称</param>
 /// <param name="DbType">参数类型</param>
 /// <param name="Size">参数大小</param>
 /// <returns>新的 parameter 对象</returns>
 public SqlParameter CreateOutParam(string ParamName, SqlDbType DbType, int Size)
 {
  return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);
 }  
 #endregion

 #region CreateReturnParam:传入返回值参数
 /// <summary>
 /// 传入返回值参数
 /// </summary>
 /// <param name="ParamName">存储过程名称</param>
 /// <param name="DbType">参数类型</param>
 /// <param name="Size">参数大小</param>
 /// <returns>新的 parameter 对象</returns>
 public SqlParameter CreateReturnParam(string ParamName, SqlDbType DbType, int Size)
 {
  return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
 } 
 #endregion 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值