中小系统.net DataAccess数据访问类

原创 2005年05月13日 12:46:00

#region 引用对象
using System;
using System.Xml ;
using System.Data;
using System.Data.SqlClient;
using System.Web; 
#endregion
namespace SysClassLibrary
{
 /// <summary>
 /// DataAccess 的摘要说明。
 /// <author>wuchen</author>
 /// <date>2004-4-12</date>
 /// <email>scwuchen@263.net</email>
 /// <description>数据处理基类,调用方式:DataAccess.DataSet((string)sqlstr);或者DataAccess.DataSet((string)sqlstr,ref DataSet ds); </description>
 /// </summary>
 public class DataAccess
 {

 #region  属性
   
  /// <summary>
  /// 是否必须关闭数据库连接
  /// </summary>
  public static bool mustCloseConnection
  {
   get
   {
    return _mustCloseConnection;
   }
   set
   {
    _mustCloseConnection=value;
   }
  }
  /// <summary>
  /// 连接字符串
  /// </summary>
  public static string connectionString
  {
   get
   {
    if(_connectionString ==string.Empty)
     return SysConfig.ConnectionString ;
    else
     return _connectionString;
   }
   set
   {
    _connectionString =value;
   }
  }
  /// <summary>
  /// 是否关闭数据库连接
  /// </summary>
  private static bool _mustCloseConnection = true; 
  private static string _connectionString =string.Empty ; 

  #endregion
 

  #region 类构造函数
  
  /// <summary>
  /// 构造函数
  /// </summary>
  public DataAccess()
  {
  }

  /// <summary>
  /// 析构函数,释放相应的对象
  /// </summary>
  ~DataAccess()
  {
  }

  #endregion

     #region  Method
  
  /// <summary>
  /// 执行Sql查询语句
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  ///<returns >i </returns>
  public static int ExecuteSql(string sqlstr){
   int i=0;
   using (SqlConnection conn =new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    comm.CommandType =CommandType.Text ;
    comm.CommandText =sqlstr;
    try
    {
     conn.Open();
     i=comm.ExecuteNonQuery();
    }
    catch(SqlException e)
    {
     new ErrorLog().SaveDataAccessError(e);
    }
    finally
    {
     conn.Close();
     comm.Dispose();
    }
   }
   return i;
  }

  /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="procName">存储过程名</param>
  /// <param name="coll">SqlParameters 集合</param>
  public static void ExecutePorcedure(string procName,SqlParameter[] coll)
  {
   using (SqlConnection conn =new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    comm.CommandType =CommandType.StoredProcedure ;
    ExecutePorcedure(procName,coll,conn,comm);
   }
  }

  public static void ExecutePorcedure(string procName,SqlParameter[] coll,ref DataSet ds)
  {
   using (SqlConnection conn =new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    comm.CommandType =CommandType.StoredProcedure ;
    ExecutePorcedure(procName,coll,conn,comm,ref ds);
   }
  }

  /// <summary>
  /// 执行存储过程类
  /// </summary>
  /// <param name="procName"></param>
  /// <param name="coll"></param>
  /// <param name="conn"></param>
  /// <param name="comm"></param>
  public static void ExecutePorcedure(string procName,SqlParameter[] coll,SqlConnection conn,SqlCommand comm)
  {
   if(procName ==null || procName=="")
    throw new SqlNullException();
   try
   {
    conn.Open(); 
    for(int i=0;i<coll.Length;i++)
    {
     comm.Parameters .Add(coll[i]);
    }
    comm.CommandType=CommandType.StoredProcedure ;
    comm.CommandText =procName;
    comm.ExecuteNonQuery();
   }
   catch(SqlException e)
   {
    new ErrorLog().SaveDataAccessError(e);
   }
   finally
   {
    comm.Parameters.Clear();
    conn.Close();
    comm.Dispose();
   }
  }

  public static void ExecutePorcedure(string procName,SqlParameter[] coll,SqlConnection conn,SqlCommand comm,ref DataSet ds)
  {
   if(procName ==null || procName=="")
    throw new SqlNullException();
   try
   {
    SqlDataAdapter da =new SqlDataAdapter();
    conn.Open(); 
    for(int i=0;i<coll.Length;i++)
    {
     comm.Parameters .Add(coll[i]);
    }
    comm.CommandType=CommandType.StoredProcedure ;
    comm.CommandText =procName;
    da.SelectCommand = comm;
    da.Fill(ds);
   }
   catch(SqlException e)
   {
    new ErrorLog().SaveDataAccessError(e);
   }
   finally
   {
    comm.Parameters.Clear();
    conn.Close();
    comm.Dispose();
   }
  }


  /// <summary>
  /// 执行Sql查询语句并返回第一行的第一条记录,返回值为object 使用时需要拆箱操作 -> Unbox
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>object 返回值 </returns>
  public static object ExecuteScalar(string sqlstr)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   
   object obj=new object();
   using (SqlConnection conn =new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    comm.CommandType =CommandType.Text;
    try
    {
     conn.Open(); 
     comm.CommandText =sqlstr;
     obj=comm.ExecuteScalar(); 
    }
    catch(SqlException e)
    {
     new ErrorLog().SaveDataAccessError(e);
    }
    finally
    {
     conn.Close();
     comm.Dispose();
    }
   }
   return obj;
  }

  /// <summary>
  /// 执行Sql查询语句,同时进行事务处理
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  public static void ExecuteSqlWithTransaction(string sqlstr)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   
   using(SqlConnection conn=new SqlConnection(connectionString))
   {
    //可以在事务中创建一个保存点,同时回滚到保存点
    SqlTransaction trans ;
    trans=conn.BeginTransaction();
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    comm.Transaction =trans;
    try
    {
     conn.Open();
     comm.CommandType =CommandType.Text ;
     comm.CommandText =sqlstr;
     comm.ExecuteNonQuery(); 
     trans.Commit();
    }
    catch
    {
     trans.Rollback();
    }
    finally
    {
     trans.Dispose();
     
     conn.Close();
     comm.Dispose();
    }
   }
  }

  /// <summary>
  /// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
  /// 方法关闭数据库连接
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>SqlDataReader对象</returns>
  public static SqlDataReader dataReader(string sqlstr)
  {
   SqlDataReader _dataReader =null ;
   dataReader(sqlstr,ref _dataReader);
   return _dataReader;
  }
  
  /// <summary>
  /// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
  /// 方法关闭数据库连接
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <param name="dr">传入的ref DataReader 对象</param>
  public static void dataReader(string sqlstr,ref SqlDataReader _dataReader)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   try
   {
    SqlConnection conn=new SqlConnection(connectionString);
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    comm.CommandText =sqlstr;
    comm.CommandType =CommandType.Text ;
    conn.Open();
    if(_mustCloseConnection)
    {
     _dataReader=comm.ExecuteReader(CommandBehavior.CloseConnection); 
    }
    else
    {
     _dataReader= comm.ExecuteReader();
    }
   }
   catch(SqlException e)
   {
    _dataReader =null;
    //输出错误原因
    throw e;
   }
  }
   
 
  /// <summary>
  /// 返回指定Sql语句的DataSet
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>DataSet</returns>
  public static DataSet dataSet(string sqlstr)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   DataSet ds= new DataSet();
   SqlDataAdapter da=new SqlDataAdapter();
   using (SqlConnection conn=new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    try
    {
     conn.Open();
     comm.CommandType =CommandType.Text ;
     comm.CommandText =sqlstr;
     da.SelectCommand =comm;
     da.Fill(ds);
    }
    catch(SqlException e)
    {
     new ErrorLog().SaveDataAccessError(e);
    }
    finally
    {
     conn.Close();
    }
   }
   return ds;
  }

  /// <summary>
  /// 返回指定Sql语句的DataSet
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <param name="ds">传入的引用DataSet对象</param>
  public static void dataSet(string sqlstr,ref DataSet ds)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   using (SqlConnection conn=new SqlConnection(connectionString))
   {
    SqlDataAdapter da=new SqlDataAdapter();
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    try
    {
     conn.Open();
     comm.CommandType =CommandType.Text ;
     comm.CommandText =sqlstr;
     da.SelectCommand =comm;
     da.Fill(ds);
    }
    catch(SqlException e)
    {
     new ErrorLog().SaveDataAccessError(e);
    }
    finally
    {
     conn.Close();
    }
   }
  }
  /// <summary>
  /// 返回指定Sql语句的DataTable
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <returns>DataTable</returns>
  public static DataTable dataTable(string sqlstr)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   SqlDataAdapter da=new SqlDataAdapter();
   DataTable datatable=new DataTable();
   using (SqlConnection conn=new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    try
    {
     conn.Open();
     comm.CommandType =CommandType.Text ;
     comm.CommandText =sqlstr;
     da.SelectCommand =comm;
     da.Fill(datatable);
    }
    catch(SqlException e)
    {
     new ErrorLog().SaveDataAccessError(e);
    }
    finally
    {
     conn.Close();
    }
   }
  
   return datatable;
  }

  /// <summary>
  /// 执行指定Sql语句,同时给传入DataTable进行赋值
  /// </summary>
  /// <param name="sqlstr">传入的Sql语句</param>
  /// <param name="dt">ref DataTable dt </param>
  public static void dataTable(string sqlstr,ref DataTable dt)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   if(dt ==null)
    dt=new DataTable();
   SqlDataAdapter da=new SqlDataAdapter();
   using (SqlConnection conn=new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    try
    {
     conn.Open();
     comm.CommandType =CommandType.Text ;
     comm.CommandText =sqlstr;
     da.SelectCommand =comm;
     da.Fill(dt);
    }
    catch(SqlException e)
    {
     new ErrorLog().SaveDataAccessError(e);
    }
    finally
    {
     conn.Close();
    }
   }
  }
  /// <summary>
  /// 执行带参数存储过程并返回数据集合
  /// </summary>
  /// <param name="procName">存储过程名称</param>
  /// <param name="parameters">SqlParameterCollection 输入参数</param>
  /// <returns></returns>
  public static DataTable dataTable(string procName,SqlParameterCollection parameters)
  { 
   if(procName ==null || procName =="")
    throw new SqlNullException();
   SqlDataAdapter da=new SqlDataAdapter();
   DataTable datatable=new DataTable();
   using (SqlConnection conn=new SqlConnection(connectionString))
   {
    SqlCommand comm=new SqlCommand();
    comm.Connection =conn;
    try
    {
     comm.Parameters.Clear();
     comm.CommandType=CommandType.StoredProcedure ;
     comm.CommandText =procName;
     foreach(SqlParameter para in parameters)
     {
      SqlParameter p=(SqlParameter)para;
      comm.Parameters.Add(p);
     }
     conn.Open();

     da.SelectCommand =comm;
     da.Fill(datatable);
    }
    catch(SqlException e)
    {
     new ErrorLog().SaveDataAccessError(e);
    }
    finally
    {
     conn.Close();
    }
   }
   
   return datatable;
  }
  /// <summary>
  /// DataView
  /// </summary>
  /// <param name="sqlstr"></param>
  /// <returns></returns>
  public static DataView dataView(string sqlstr)
  {
   if(sqlstr ==null || sqlstr =="")
    throw new SqlNullException();
   SqlDataAdapter da=new SqlDataAdapter();
   DataView dv=new DataView();
   DataSet ds=new DataSet();
   dataSet(sqlstr,ref ds);
   dv=ds.Tables[0].DefaultView;
   return dv;
  }

  #endregion
 }

 #region  异常类,记录出错信息
 /// <summary>
 /// 异常类
 /// </summary>
 public class SqlNullException:ApplicationException
 {
  /// <summary>
  /// 构造函数
  /// </summary>
  public SqlNullException(){
   new SqlNullException("DataAccess类中静态成员 参数不能为空。可能是sqlstr =null");
  }

  /// <summary>
  /// 重载出错信息
  /// </summary>
  /// <param name="message"></param>
  public SqlNullException(string message)
  {
   //保存出错信息
   try
   {
    //err.SaveDataAccessError(message);
    HttpContext.Current.Response.Write(message);
   }
   catch
   {
    throw;
   }
  }
  /// <summary>
  /// 重载出错信息
  /// </summary>
  /// <param name="e"></param>
  public SqlNullException(SqlException e)
  {
   //保存出错信息
   try
   {
    HttpContext.Current.Response.Write(e.Message);
    //err.SaveDataAccessError(e);
   }
   catch
   {
    throw;
   }
  }

  /// <summary>
  /// 析构函数
  /// </summary>
  ~ SqlNullException()
  {
      
  }
  private ErrorLog err=new ErrorLog();
 }
 #endregion

 #region ErrorLog 错误日志捕获
 /// <summary>
 /// ErrorLog 的摘要说明。
 /// </summary>
 public class ErrorLog
 {
  /// <summary>
  /// ctr
  /// </summary>
  public ErrorLog()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  /// <summary>
  /// 数据库访问出错日志
  /// </summary>
  /// <param name="e">错误信息 </param>
  public void SaveDataAccessError(SqlException e)
  {
   //生成的错误行号
//   int lineNumber = e.LineNumber ;
//   string message=  e.Message;
//   int number =e.Number;
//   string procedure=e.Procedure ;
//   string source=e.Source ;
//   
//   string ErrMessage ="LineNumber:"+lineNumber.ToString() + " ---- Procedure:"+ procedure.ToString()   ;
//   string ErrSource =source ;
//   string ErrTargetSite ="错误号:"+number ;
//   string Url =HttpContext.Current.Request.UrlReferrer.AbsolutePath  ;
//   string IP  = HttpContext.Current.Request.UserHostAddress ;
//   try
//   {
//    SysClassLibrary.DataAccess.mustCloseConnection =true;
//    SysClassLibrary.DataAccess.ExecuteSql(string.Format("insert into sys_errorLog(ErrMessage,ErrSource,ErrTargetSite,Url,IP)values('{0}','{1}','{2}','{3}','{4}') ",ErrMessage,ErrSource,ErrTargetSite,Url,IP));
//   }
//   catch
//   {
//   }
  }
  /// <summary>
  /// 数据库访问出错日志
  /// </summary>
  /// <param name="message">出错信息</param>
  public void SaveDataAccessError(string message)
  {
   //生成的错误行号
   
//   string ErrMessage =message;
//   string ErrSource ="" ;
//   string ErrTargetSite ="";
//   string Url =HttpContext.Current.Request.UrlReferrer.AbsolutePath  ;
//   string IP  = HttpContext.Current.Request.UserHostAddress ;
//   try
//   {
//    SysClassLibrary.DataAccess.mustCloseConnection =true;
//    SysClassLibrary.DataAccess.ExecuteSql(string.Format("insert into sys_errorLog(ErrMessage,ErrSource,ErrTargetSite,Url,IP)values('{0}','{1}','{2}','{3}','{4}') ",ErrMessage,ErrSource,ErrTargetSite,Url,IP));
//   }
//   catch
//   {
//   }
  }
 }
 #endregion
}

中小系统.net DataAccess数据访问类

#region 引用对象 using System;using System.Xml ;using System.Data;using System.Data.SqlClient;using Syst...
  • sunkangta
  • sunkangta
  • 2005年05月23日 02:39
  • 1202

中小系统.net DataAccess数据访问类

 #region 引用对象 using System;using System.Xml ;using System.Data;using System.Data.SqlClient;using Sys...
  • daban1
  • daban1
  • 2006年11月27日 21:37
  • 760

数据库操作经典类[DataAccess.cs]

/* * * User: CoderLu * Date: 2010/10/28 * Time: 21:16 * */ using System; using Sys...
  • lutinghuan
  • lutinghuan
  • 2010年12月19日 22:33
  • 2128

基于IBatisNet(MyBatis.Net)的Repository

说明什么的就不写了,直接上代码,如果不了解Repository,那就先去百度或者谷歌下…… IRepository接口约束   using IBatisNet.DataAccess.Int...
  • starfd
  • starfd
  • 2015年02月04日 10:07
  • 3765

.NET 数据访问架构指南(转)

 Alex Mackman, Chris Brooks, Steve Busby, 和 Ed Jezierski 微软公司 2001年10月 概述:本文提供了在多层.NET应用程序中实施基于ADO.N...
  • ycl111
  • ycl111
  • 2004年12月06日 13:07
  • 1198

.net中利用oracle产品自带的数据访问组件(Oracle.DataAccess.dll)提升批量更新操作的执行效率

//动态链接库路径$Oracle安装路径$/bin/Oracle.DataAccess.dll//命名空间引用using Oracle.DataAccess.Client;//编码过程概略int ro...
  • sharpnessdotnet
  • sharpnessdotnet
  • 2008年01月15日 11:31
  • 7375

两种数据访问方式:从ADO 到ADO.NET

电脑最大的好处就是可以帮助人处理大量数据,由此离不开对数据库的访问,先看看最近在做ASP.NET例子的时候经常用到的ADO.NET的数据库访问方式。...
  • u010927640
  • u010927640
  • 2016年03月13日 17:17
  • 3296

第40章、通用类DataAccess

【知识要点】   (1)通用类 【问题提出】   我们发现“连接数据库”、加载“GridView”、加载“下拉列表框”等等有着太多重复的代码,能不能简化代码呢?      而有一天,却突然...
  • jianghuiquan
  • jianghuiquan
  • 2013年05月28日 09:09
  • 1750

(一)ADO.NET概述及其重要的类

1、  概念 ADO.NET 是一组向 .NET 程序员公开数据访问服务的类。ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件。它提供了对关系数据、XML 和应用程序数据的访问,因此...
  • u010808783
  • u010808783
  • 2015年06月24日 14:13
  • 343

ASP.Net 4.0 --- 数据访问(三)

数据访问ADO.Net基础      ASP.NET提供了ADO.NET技术,它是ASP.NET应用程序与数据库进行交互的一种技术。ADO.NET提供了对关系数据、XML和应用程序数据的访问,是.NE...
  • u010349629
  • u010349629
  • 2017年08月15日 18:18
  • 567
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:中小系统.net DataAccess数据访问类
举报原因:
原因补充:

(最多只允许输入30个字)