简单程序所需要的简单 asp.net通用数据库访问类

本文介绍了一个简单的程序如何使用通用数据库访问类进行数据处理,包括打开数据库连接、执行SQL查询、执行存储过程等功能。适用于需要与数据库交互但无需复杂分层结构的小型项目。

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

简单程序不需要分层,各页面共用相同的通用数据库访问类即可 

 

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

namespace SysClassLibrary 

/// <summary> 
/// DataAccess 的摘要说明。 
/// <description>数据处理基类,调用方式:DataAccess.DataSet((string)sqlstr);或者DataAccess.DataSet((string)sqlstr,ref DataSet ds); </description> 
/// </summary> 
public class DataAccess 

#region 属性 
protected static SqlConnection conn=new SqlConnection(); 
protected static SqlCommand comm=new SqlCommand(); 
#endregion 
public DataAccess() 

//init(); 

#region 内部函数 静态方法中不会执行DataAccess()构造函数 

/// <summary> 
/// 打开数据库连接 
/// </summary> 
private static void openConnection() 

if (conn.State == ConnectionState.Closed) 

//SysConfig.ConnectionString 为系统配置类中连接字符串,如:"server=localhost;database=databasename;uid=sa;pwd=;" 

conn.ConnectionString = SysConfig.ConnectionString ; 
comm.Connection =conn; 
try 

conn.Open(); 

catch(Exception e) 

throw new Exception(e.Message); 



/// <summary> 
/// 关闭当前数据库连接 
/// </summary> 
private static void closeConnection() 

if(conn.State == ConnectionState.Open) 
conn.Close(); 
conn.Dispose(); 
comm.Dispose(); 

#endregion 
/// <summary> 
/// 执行Sql查询语句 
/// </summary> 
/// <param name="sqlstr">传入的Sql语句</param> 
public static void ExecuteSql(string sqlstr) 

try 

openConnection(); 
comm.CommandType =CommandType.Text ; 
comm.CommandText =sqlstr; 
comm.ExecuteNonQuery(); 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

closeConnection(); 



/// <summary> 
/// 执行存储过程 
/// </summary> 
/// <param name="procName">存储过程名</param> 
/// <param name="coll">SqlParameters 集合</param> 
public static void ExecutePorcedure(string procName,SqlParameter[] coll) 

try 

openConnection(); 
for(int i=0;i<coll.Length;i++) 

comm.Parameters .Add(coll[i]); 

comm.CommandType=CommandType.StoredProcedure ; 
comm.CommandText =procName; 
comm.ExecuteNonQuery(); 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

comm.Parameters.Clear(); 
closeConnection(); 



/// <summary> 
/// 执行存储过程并返回数据集 
/// </summary>

/// <param name="procName">存储过程名称</param> 
/// <param name="coll">SqlParameter集合</param> 
/// <param name="ds">DataSet </param> 
public static void ExecutePorcedure(string procName,SqlParameter[] coll,ref DataSet ds) 

try 

SqlDataAdapter da=new SqlDataAdapter(); 
openConnection(); 
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(Exception e) 

throw new Exception(e.Message); 

finally 

comm.Parameters.Clear(); 
closeConnection(); 



/// <summary> 
/// 执行Sql查询语句并返回第一行的第一条记录,返回值为object 使用时需要拆箱操作 -> Unbox 
/// </summary> 
/// <param name="sqlstr">传入的Sql语句</param> 
/// <returns>object 返回值 </returns> 
public static object ExecuteScalar(string sqlstr) 

object obj=new object(); 
try 

openConnection(); 
comm.CommandType =CommandType.Text ; 
comm.CommandText =sqlstr; 
obj=comm.ExecuteScalar(); 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

closeConnection(); 

return obj; 


/// <summary> 
/// 执行Sql查询语句,同时进行事务处理 
/// </summary> 
/// <param name="sqlstr">传入的Sql语句</param> 
public static void ExecuteSqlWithTransaction(string sqlstr) 

SqlTransaction trans ; 
trans=conn.BeginTransaction(); 
comm.Transaction =trans; 
try 

openConnection(); 
comm.CommandType =CommandType.Text ; 
comm.CommandText =sqlstr; 
comm.ExecuteNonQuery(); 
trans.Commit(); 

catch 

trans.Rollback(); 

finally 

closeConnection(); 



/// <summary> 
/// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接 
/// 方法关闭数据库连接 
/// </summary> 
/// <param name="sqlstr">传入的Sql语句</param> 
/// <returns>SqlDataReader对象</returns> 
public static SqlDataReader dataReader(string sqlstr) 

SqlDataReader dr=null; 
try 

openConnection(); 
comm.CommandText =sqlstr; 
comm.CommandType =CommandType.Text ; 
dr=comm.ExecuteReader(CommandBehavior.CloseConnection); 

catch 

try 

dr.Close(); 
closeConnection(); 

catch 
{


return dr; 

/// <summary> 
/// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接 
/// 方法关闭数据库连接 
/// </summary> 
/// <param name="sqlstr">传入的Sql语句</param> 
/// <param name="dr">传入的ref DataReader 对象</param> 
public static void dataReader(string sqlstr,ref SqlDataReader dr) 

try 

openConnection(); 
comm.CommandText =sqlstr; 
comm.CommandType =CommandType.Text ; 
dr=comm.ExecuteReader(CommandBehavior.CloseConnection); 

catch 

try 

if(dr!=null && !dr.IsClosed) 
dr.Close(); 

catch 


finally 

closeConnection(); 





/// <summary> 
/// 返回指定Sql语句的DataSet 
/// </summary> 
/// <param name="sqlstr">传入的Sql语句</param> 
/// <returns>DataSet</returns> 
public static DataSet dataSet(string sqlstr) 

DataSet ds= new DataSet(); 
SqlDataAdapter da=new SqlDataAdapter(); 
try 

openConnection(); 
comm.CommandType =CommandType.Text ; 
comm.CommandText =sqlstr; 
da.SelectCommand =comm; 
da.Fill(ds); 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

closeConnection(); 

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) 

SqlDataAdapter da=new SqlDataAdapter(); 
try 

openConnection(); 
comm.CommandType =CommandType.Text ; 
comm.CommandText =sqlstr; 
da.SelectCommand =comm; 
da.Fill(ds); 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

closeConnection(); 


/// <summary> 
/// 返回指定Sql语句的DataTable 
/// </summary> 
/// <param name="sqlstr">传入的Sql语句</param> 
/// <returns>DataTable</returns> 
public static DataTable dataTable(string sqlstr) 

SqlDataAdapter da=new SqlDataAdapter(); 
DataTable datatable=new DataTable(); 
try 

openConnection(); 
comm.CommandType =CommandType.Text ; 
comm.CommandText =sqlstr; 
da.SelectCommand =comm; 
da.Fill(datatable); 

catch(Exception e) 

throw new Exception(e.Message); 
}

finally 

closeConnection(); 

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) 

SqlDataAdapter da=new SqlDataAdapter(); 
try 

openConnection(); 
comm.CommandType =CommandType.Text ; 
comm.CommandText =sqlstr; 
da.SelectCommand =comm; 
da.Fill(dt); 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

closeConnection(); 


/// <summary> 
/// 执行带参数存储过程并返回数据集合 
/// </summary> 
/// <param name="procName">存储过程名称</param> 
/// <param name="parameters">SqlParameterCollection 输入参数</param> 
/// <returns></returns> 
public static DataTable dataTable(string procName,SqlParameterCollection parameters) 

SqlDataAdapter da=new SqlDataAdapter(); 
DataTable datatable=new DataTable(); 
try 

openConnection(); 
comm.Parameters.Clear(); 
comm.CommandType=CommandType.StoredProcedure ; 
comm.CommandText =procName; 
foreach(SqlParameter para in parameters) 

SqlParameter p=(SqlParameter)para; 
comm.Parameters.Add(p); 

da.SelectCommand =comm; 
da.Fill(datatable); 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

closeConnection(); 

return datatable; 


public static DataView dataView(string sqlstr) 

SqlDataAdapter da=new SqlDataAdapter(); 
DataView dv=new DataView(); 
DataSet ds=new DataSet(); 
try 

openConnection(); 
comm.CommandType=CommandType.Text; 
comm.CommandText =sqlstr; 
da.SelectCommand =comm; 
da.Fill(ds); 
dv=ds.Tables[0].DefaultView; 

catch(Exception e) 

throw new Exception(e.Message); 

finally 

closeConnection(); 

return dv; 


1. 所有SQL语句都放在不同的XML檔中(一个业务使用一个XML檔),该档可用工具维护。大大节省开发及维护时间。2.数据库结构改变时,只需修改SQL配置文件(用DBMap工具维护),而不用改代码(如果结构改变影响到页面,当然也要改页面,如在查询SQL中多加一个字段,而这个字段需要在页面上显示,当然要在页面中加上显示该字段的列,又如一个表增加了一个字段,而该字段需要在页面上输入,这时也要修改页面,增加输入该字段值的列,除此之外不需要修改其它代码)。3.没有用代码来自动生成SQL语句(除新增、修改外),而是手工编写SQL语句(然后用DBMap工具维护SQL配置文件),可以对SQL语句进行最大优化。4.支持任何形式的SQL语句,包括存储过程。可以在SQL语句中使用数据库的任何函数(如果使用某个数据库的专用函数,在更换数据库系统时会带来麻烦)。5.支持动态查询,可任意指定查询条件,且查询条件个数不确定。支持数据库分页(需存储过程支持)。6. 支持数据缓存功能,可为每个SQL语句分别设定是否使用缓存、缓存别(依赖数据库、绝对时间、相对时间),缓存时间。7.支持所有数据库,理论上与数据库系统无关(如果不使用数据库的专用功能时),可任意更换数据库系统。8.支持同时连接多个数据库,这些数据库甚至是不同的数据库系统。9.支持多国语言,可方便开发多国语言系统。10.支持系统参数及讯息设定,可灵活设定系统参数,可自己定义显示信息。11.支持错误日志功能,可设定是否使用日志、是否将日志email给指定的人员(如测试员,开发人员等)12.最大特点是简单,使用方便,没有其它DAL那种复杂的配置及使用,如果你正在找一个使用简单,能节省大量时间的数据库访问层,这个也许就是你要找的。13.库仅仅是把对数据库操作的常用代码封装而已,没有真正意义的ORM,充其量只算半个ORM,程序还是“依赖”数据表的字段(实际应用时,数据表的字段名很少改变)。关于这个问题很难说得清楚,只有真正用时才会体会到,呵呵…,这个就不多说了,有兴趣的朋友可以试用一下,有问题请直接联系我(e865@163.com)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值