发布SqlHelper

发布自己写的SqlHelper。
http://files.cnblogs.com/fucai/SqlHelper.rar
使用方式大致如下:

//  使用前初始化SqlHelper
DataAccess.Initialize( " SqlClient " , " 连接字符串 " );

//  通常的执行sql方式。静态方法。有连接计数,
//  外面可以成对调用SqlHelper.OpenConnection(),Close方法,也可以不调用
SqlHelper.ExecuteNonQuery( " sql " );

//  允许事务
SqlHelper.BeginTransaction();
SqlHelper.ExecuteNonQuery(
" sql " );
SqlHelper.ExecuteNonQuery(
" sql " );
SqlHelper.CommitTransaction();

 

说说我的设计思想吧: 轻量级,简单易懂,容易理解,整个程序集给外面只暴露2个类。DataAccess和SqlHelper。使用者可通过自己写不同的DbProvider来扩展不同的数据库支持。(DataAccess类为核心类,SqlHelper只暴露静态方法,是对DataAccess的一个快捷方式。由于SqlHelper使用DataAccess线程静态对象作为其内部成员,所以SqlHelper是线程安全的,在如ASP.NET这种多线程编程模型下可放心使用。)

特点

1. 内部不使用具体的ADO.NET对象。使用如IDbConnection,IDbCommand等。所以较容易更换数据库。

2. Execute系列方法对连接状态都是自适应,使用连接计数。类似Adapter.Fill方法,若在方法外面已经打开连接,则方法内部不会重新打开连接也不会关闭连接,若方法外面没有打开连接,则方法内部自己打开连接并在方法结束时关闭连接。(ExecuteReader方法不会自己打开数据连接)

3. SqlHelper的Execute静态方法系列,可通过静态方法OpenConnection()和CloseConnection()连接多个数据访问操作,可以嵌套。事务也可以这样串联。由于数据打开和关闭、以及事务的管理,都使用计数器,使得在编写一个方法的时候可以先不管外界调用时是否要将其放在一个事务中串联,如:

ContractedBlock.gif ExpandedBlockStart.gif Code
static public void DeleteTable1()
{
    SqlHelper.ExecuteNonQuery(
"delete from table1");


static public void DeleteTable2()
{
    SqlHelper.ExecuteNonQuery(
"delete from table2");
}
// 而外面若需要将这两个操作放在一个事务中,只需这样调用:
SqlHelper.BeginTransaction();
try
{
    DeleteTable1();
    DeleteTable2();
    SqlHelper.CommitTransaction();
}
catch
{
    SqlHelper.RollbackTransaction();
    throw;
}

由于SqlHelper内部使用的是线程静态成员的DataAccess对象,所以两个方法会在一个事务中执行,且不会出现多线程问题。

4. 异步的SQL执行。当执行写日志等这些不关心结果的SQL时,可使用异步的SQL执行,这个方法只会将SQL放入一个队列,然后马上返回。当第一次执行的时候,会从线程池开启一个线程,去检查队列,若队列有SQL,则执行。

转载于:https://www.cnblogs.com/fucai/archive/2009/04/06/1430355.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值