以前做的一个SQL Server数据库访问类,主要适用于C/S结构

该博客实现了一个为C/S结构系统提供数据访问的组件。使用C#语言,借助System.Data和System.Data.SqlClient命名空间,实现了数据库的连接、打开、关闭,以及执行SQL语句返回DataTable、DataSet等功能,还包含事务处理和内存释放等操作。

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

比较的混乱,没怎么整理,主要是实现了一个思路:
using System;
using System.Data;
using System.Data.SqlClient;

namespace GYQM.Common
{
 /// <summary>
 /// 为C/S结构的系统提供数据访问组件
 /// </summary>
 public class ClsConnectForCS
 {

  #region 自定义私有字段
  
  private string sConnString;                         //SQL Server的连接字符串
  private SqlConnection cConnection=null;             //SQL Server的连接器
  private int trans=0;                                //记录事务的次数
  private static ClsConnectForCS cConnectDAL=null;    //私有类变量,用来返回类的实例化
  
  #endregion

  #region 单件模式(SingleTon Model)
 
  /// <summary>
  /// 当构造函数为私有时,外界不能实例化该类
  /// </summary>
  private ClsConnectForCS()
  {}

  /// <summary>
  /// 该类真正的实例化函数,用来返回该类的实例
  /// </summary>
  /// <returns>ConnectDAL</returns>
  public static ClsConnectForCS Instance()
  {
   if (cConnectDAL == null)
    cConnectDAL=new ClsConnectForCS();
   return cConnectDAL;
  }
  #endregion

  #region Overrides Function
  
  /// <summary>
  /// 覆盖默认的缺省函数,使其能够按照我们的方式来返回字符串
  /// </summary>
  /// <returns>数据库连接字符串</returns>
  public override string ToString()
  {
   return sConnString;
  }
  
  #endregion

  #region public Methods for users to act in certain function

  /// <summary>
  /// 打开数据库的连接
  /// </summary>
  /// <returns>如果成功返回真,否则返回假</returns>
  public bool OpenDatabase()
  {
   try
   {
    sConnString = Agriculture.ClsCommon.ReadAppSettings("sqlConnection.ConnectionString");    if (cConnection == null)
     cConnection=new SqlConnection(sConnString);

    if (cConnection.State!=ConnectionState.Open)
     cConnection.Open();
    return true;
   }
   catch
   {
    return false;
   }
  }


  /// <summary>
  /// 关闭数据库
  /// </summary>
  /// <returns>成功则返回True</returns>
  public bool CloseDatabase()
  {
   try
   {
    if (trans!=0)
     return true;

    if (cConnection.State!=ConnectionState.Closed)
     cConnection.Close(); 
    return true;
   }
   catch
   {
    return false;
   }
  }

        /// <summary>
        /// 执行sql语句,返回DataTable
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <returns>数据表</returns>
        public DataTable ExecuteDataTable(string sql)
        {
            DataTable dt = new DataTable();
            SqlDataAdapter sAdapter=new SqlDataAdapter(sql,cConnection);
            sAdapter.Fill(dt);
            return dt;
        }
        public DataTable ExecuteDataTable(SqlCommand cmd)
        {
            DataTable dt = new DataTable();
            cmd.Connection = this.cConnection;
            SqlDataAdapter sAdapter=new SqlDataAdapter(cmd);
            sAdapter.Fill(dt);
            return dt;
        }
  /// <summary>
  /// 执行sql语句,返回DataSet
  /// </summary>
  /// <param name="sql">要执行的SQL语句</param>
  /// <returns>数据集</returns>
  public DataSet ExecuteDataSet(string sql)
  {
   DataSet ds = new DataSet();
   SqlDataAdapter sAdapter=new SqlDataAdapter(sql,cConnection);
   sAdapter.Fill(ds);
   return ds;
  }

  /// <summary>
  ///执行SqlString语句,不需要从数据库返回任何内容
  /// </summary>
  /// <param name="SqlString"></param>
  /// <returns>如果成功返回真,否则返回假</returns>
  public void ExecuteNonQuery(string SqlString)
  {
   SqlCommand cCmd=new SqlCommand();
   cCmd.Connection=cConnection;
   cCmd.CommandText=SqlString;
   cCmd.ExecuteNonQuery();
  }
        public void ExecuteNonQuery(SqlCommand cmd)
        {
            cmd.Connection = cConnection;
            cmd.ExecuteNonQuery();
        }
  /// <summary>
  /// 返回标量值,上一级人员可以根据需要进行类型转换
  /// </summary>
  /// <param name="sql">传递过来的sql语句</param>
  /// <returns>成功或失败</returns>
  public object ExecuteScalar(string sql)
  {
   SqlCommand cCmd=new SqlCommand();
   cCmd.Connection=cConnection;
   cCmd.CommandText=sql;
   return cCmd.ExecuteScalar();
  }
        /// <summary>
        /// 执行Command
        /// 编码:王凯
        /// </summary>
        /// <param name="cmd">Command</param>
        /// <returns>Object</returns>
        public object ExecuteScalar(System.Data.SqlClient.SqlCommand cmd)
        {
            cmd.Connection = cConnection;
            return cmd.ExecuteScalar();
        }
  /// <summary>
  /// 执行Command对象
  /// </summary>
  /// <param name="myCommand">从上层传递过来的命令对象</param>
  /// <returns>如果成功返回真,否则返回假</returns>
  public void Run(SqlCommand myCommand)
  {
   myCommand.Connection=cConnection;
   myCommand.ExecuteNonQuery();
  }

  /// <summary>
  /// 执行Command语句
  /// </summary>
  /// <param name="myCommand">从上层传递过来的命令对象</param>
  /// <param name="dt">填充从上层传递过来的表对象</param>
  /// <returns>如果成功返回真,否则返回假</returns>
  public bool Run(SqlCommand myCommand,DataTable dt)
  {
   try
   {
    myCommand.Connection=cConnection;
    SqlDataAdapter sDataAdapter = new SqlDataAdapter();
    sDataAdapter.SelectCommand =myCommand;
    sDataAdapter.Fill(dt);
    return true;
   }
   catch
   {
    return false;
   }
  }

  public DataSet Run(string sqlStr)
  {
   DataSet ds=new DataSet();
   SqlCommand myCommand=new SqlCommand(sqlStr,cConnection);
   SqlDataAdapter sDataAdapter = new SqlDataAdapter();
   sDataAdapter.SelectCommand =myCommand;
   sDataAdapter.Fill(ds);
   return ds;
  }


  /// <summary>
  /// <param name="mySelectQuery"></param>
  /// <returns>如果成功返回SqlDataReader,包含多个字段的结果集;否则返回空的SqlDataReader</returns>
  public SqlDataReader Getkind(string mySelectQuery)
  {
   SqlCommand myCommand=null;
   SqlDataReader myReader=null;
   try
   {
    myCommand = new SqlCommand(mySelectQuery,cConnection);
    myReader = myCommand.ExecuteReader();
    return myReader;
    
   }
   catch
   {
    return myReader;
   }
   finally
   {
    myCommand.Dispose();
    myCommand=null;
   }
  }

  /// <summary>
  /// 执行sql语句
  /// </summary>
  /// <param name="sql"></param>
  /// <param name="myDataSet"></param>
  /// <returns>成功返回数据集</returns>
  public bool Run(string sql,DataTable myDataTable)
  {
   SqlDataAdapter sAdapter=null;
   try
   {
    sAdapter=new SqlDataAdapter(sql,cConnection);
    sAdapter.Fill(myDataTable);
    return true;
   }
   catch
   {  
    throw;
   }
   
   finally
   {
    myDataTable=null;
    sAdapter.Dispose();
    sAdapter=null;
   }
  }


  /// <summary>
  /// 事务开始
  /// </summary>
  public void BeginTransaction()
  {
   trans+=1;
   SqlCommand sCmd=null;
   sCmd=new SqlCommand("BEGIN TRANSACTION",cConnection);
   sCmd.ExecuteNonQuery();
   sCmd.Dispose();
   sCmd=null;
  }
  
  /// <summary>
  /// 事务提交
  /// </summary>
  public void CommitTransaction()
  {
   trans-=1;
   SqlCommand sCmd=null;
   sCmd=new SqlCommand("COMMIT TRANSACTION",cConnection);
   sCmd.ExecuteNonQuery();
   sCmd.Dispose();
   sCmd=null;
  }

  /// <summary>
  /// 事务回滚
  /// </summary>
  public void RollbackTransaction()
  {
   trans-=1;
   SqlCommand sCmd=null;
   sCmd=new SqlCommand("ROLLBACK TRANSACTION",cConnection);
   sCmd.ExecuteNonQuery();
   sCmd.Dispose();
   sCmd=null;
  }

  /// <summary>
  /// 显式释放内存
  /// </summary>
  public void Dispose()
  {
   if (cConnection!=null)
    cConnection= null;
  }

  #endregion
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值