发布自己写的SqlHelper。
https://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()连接多个数据访问操作,可以嵌套。事务也可以这样串联。由于数据打开和关闭、以及事务的管理,都使用计数器,使得在编写一个方法的时候可以先不管外界调用时是否要将其放在一个事务中串联,如:

Code

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

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

posted on 2009-04-06 17:57  赋才  阅读(2988)  评论(22编辑  收藏  举报