自己编写的数据访问类(C#)--第二篇
作者/天才 时间/2006-1-10 17:09:00 类别/开发技术 查看/
 发表评论 以论坛方式查看
标签:.Net联盟
作者:黄润成


三、使用说明

1、 设置配置文件
如果要使用 DbService 类的静态方法,必须在配置文件中添加以下内容:

<!--数据连接串信息-->
<add key="ConnectionString" value="uid=ITEasyAdmin;pwd=××××;Initial Catalog=ITEasy;Data Source=192.168.11.3"/>

<!--数据服务对象类型信息,此处指定DbService类的DbServicePool列表引用的IDbService接口实现类-->
<!—如果使用OleDbService类,则value设置为:it.com.cn.DbServices.SqlDbServices.OleDbService -->
<add key="EntityType" value="it.com.cn.DbServices.SqlDbServices.SqlDbService"/>

<!—设置数据库连接超时时间,单位:毫秒-->
<add key="DbTimeOut" value="180000"/>


2、 使用DbService类
DbService类的静态字段DbServicePool中维护着一个IDbService接口类型的实例对象引用列表,每个引用都指向一个SqlDbService或OleDbService类的实例对象。
同时,DbService类中还启用一个后台线程,定时检测DbServicePool中引用的对象的数据库连接时间是否超过指定的时间,如果超时则关闭引用对象的数据库连接,以释放资源和解决数据库连接超时的异常。
对于IDbService接口中定义的每一个方法,DbService类都实现了相应的静态方法。在这些静态方法中通过调用DbServicePool列表中引用的对象的相应方法来实现功能。因此,可直接通过DbService的静态方法来调用SqlDbService或OleDbService类实例对象的IDbService接口服务。具体调用方法如下面的示例程序片段。

(1) 查询数据,返回 IDataReaderWrapper 实现对象。

string SqlString = "SELECT GradeID FROM Users WHERE UserID=@UserID";
//创建一个包含“@UserID”参数的参数管理对象,该对象可包含多个参数。
DbParams Params = DbService.CreateDbParams("@UserID", DbType.Int32, int.Parse(UserID));
//调用DbService类的静态方法并传入查询语句和参数管理对象,取得包含查询结果的
//IDataReaderWrapper对象。
IDataReaderWrapper chnReader = DbService.ExecuteReader(SqlString, Params);
try
{
//绑定查询结果到数据绑定控件上。
rptChannels.DataSource = chnReader;
rptChannels.DataBind();
}
finally
{
//关闭 IDataReaderWrapper 接口实例对象的引用,以执行在 DbService 类中的回调函数, 
//以便将从 DbServicePool中取得的 IDbSerivce 接口实例对象放回 DbServicePool 列表中。
chnReader.Close();
}


(2) 查询数据,返回 DataSet 或 DataTable 对象。

string SqlString = "SELECT GradeID FROM Users WHERE UserID=@UserID";
//创建一个包含“@UserID”参数的参数管理对象,该对象可包含多个参数。
DbParams Params = DbService.CreateDbParams("@UserID", DbType.Int32, int.Parse(UserID));
//调用DbService类的静态方法并传入查询语句和参数管理对象,取得查询结果并绑定到数据绑定控件上。
rptChannels.DataSource = DbService.ExecuteDataSet(SqlString, Params);
rptChannels.DataBind();


(3) 提交数据(插入、修改、删除等)

//删除数据和更新数据
String SqlString = "DELETE Favorites WHERE FavoriteID=@FavoriteID;" +
"UPDATE ObjectTags SET IsDelete=1 WHERE ObjectType='Favorite' AND ObjectID=@FavoriteID;";
//创建参数管理对象。
DbParams Params = DbService.CreateDbParams("@FavoriteID", DbType.Int32, int.Parse(FavoriteID));
//执行无返回结果的SQL语句。
ADbService.ExecuteNone(SqlString, Params);



(4) 启用事务
还用上面的例子,如果要在执行多个写数据库操作的时候需要启用数据库事务来保持数据完整性,则可以使用下面的方法来启用事务:

//删除数据和更新数据
String SqlString = "DELETE Favorites WHERE FavoriteID=@FavoriteID;" +
"UPDATE ObjectTags SET IsDelete=1 WHERE ObjectType='Favorite' AND ObjectID=@FavoriteID;";
//从DbService类的DbServicePool静态列表中取出一个IDbService接口实现对象。
IDbService ADbService = DbService.GetDbService();
//创建参数管理对象。
DbParams Params = ADbService.CreateDbParams("@FavoriteID", DbType.Int32, int.Parse(FavoriteID));
try
{
//开始事务
ADbService.BeginTransaction();
//执行SQL语句。
ADbService.ExecuteNone(SqlString, Params);
//提交事务。
ADbService.CommitTransaction();
}
finally
{
//最后,将使用完的IDbService接口实现对象放加DbService类的DbServicePool静态列表中备用。
DbService.ReleaseDbService(ADbService);
}


(5) DbService类定义的静态方法列表
DbService类对应IDbService接口的所有方法都定义了相应的静态方法,然后通过自身维护的IDbService类型的静态列表字段DbServicePool中的引用对象来提供这些静态方法的实际实现。
此外,DbService类中定义的一些静态方法还提供除了IDbService接口指定的方法以外的功能。
查看该用户更多文章>>