模块名称:Data Access Application Block
1. 概述: Data Access Application Block 是一个 .NET 组件,包含优化的数据访问代码。
2. 功能说明
2.1.可以帮助用户调用存储过程以及向 SQL Server 数据库发出 SQL 文本命令。它返回 SqlDataReader、DataSet 和 XmlReader 对象。
2.2.可以在.NET 应用程序中将其作为构造块来使用,以减少需要创建、测试和维护的自定义代码的数量。
2.3.Data Access Application Block 将访问 Microsoft SQL Server数据库的性能和资源管理方面的最佳经验封装在一起。
2.4.可以很方便地在.NET 应用程序中将其作为构造块使用,从页减少了需要创建、测试和维护的自定义代码的数量。
3.类和方法说明
3.1 Data Access Application Block提供了两个类:SqlHelper 类和SqlHelperParameterCache类
3.1.1.SqlHelper 类:执行命令类,执行数据库命令的核心功能,提供了使开发者能够更好的解决数据库服务的自定义方法,它不能继承,其构造函数为私有的。
3.1.2. SqlHelper 类提供了一组静态方法,可以用来向 SQL Server 数据库发出许多各种不同类型的命令。
3.1.3.SqlHelper 类提供了五种静态方法:ExecuteNonQuery、ExecuteDataset、ExecuteReader、ExecuteScalar 和 ExecuteXmlReader。实现的每种方法都提供一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式注意事项`
3.2.1. SqlHelperParameterCache类:提供参数发现和缓存功能。
4.使用方法:
调用存储过程或 SQL 文本命令,指定参数详细信息,返回 SqlDataReader、DataSet 或 XmlReader 对象。
4.1. Data Access Application Block 是如何来执行数据库命令和管理参数?如图显示了 Data Access Application Block 的主要元素。
调用存储过程或 SQL 文本命令, 指定参数详细信息。返回 SqlDataReader、DataSet 或 XmlReader 对象
4.2 Data Access Application Block存取数据过程
4.3具体的调用方法:
①Execute* (SqlConnection connection, CommandType commandType, string commandText)
②Execute* (SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
③Execute* (SqlConnection connection, string spName, params object[] parameterValues)
④Execute* (SqlTransaction transaction, CommandType commandType, string commandText)
⑤Execute* (SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
⑥Execute* (SqlTransaction transaction, string spName, params object[] parameterValues)
例:使用ExecuteDataset
private DataSet RetrieveDataSet(string connectionString, int categoryID)
{
// 调用SqlHelper中的静态方法ExecuteDataset,返回一个Dataset
DataSet ds = SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure,
"getProductsByCategory", new SqlParameter("@CategoryID", categoryID) );
return ds;
}
此例子用使用的一个存储过程
CREATE PROCEDURE getProductsByCategory @CategoryID INTEGER
AS
SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice
FROM Products
WHERE CategoryID = @CategoryID
GO
也可以直接以SQL文本命令,
private DataSet RetrieveDataSet(string connectionString, int categoryID)
{
string strSQL=” SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products”+
“WHERE CategoryID = @CategoryID”;
// 调用SqlHelper中的静态方法ExecuteDataset,返回一个Dataset
DataSet ds = SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure,
strSQL, new SqlParameter("@CategoryID", categoryID) );
return ds;
}
5.注意事项:
5.1 ExecuteXmlReader 不支持连接字符串,因为:与 SqlDataReader 对象不同,XmlReader 对象在 XmlReader 关闭时没有提供自动关闭连接的方法。如果客户端传递了连接字符串,那么当客户端完成对 XmlReader 的操作后,将无法关闭与 XmlReader 相关联的连接对象。
5.3 用作参数集的键的连接字符串通过简单的字符串比较进行匹配。用于从 GetCachedParameterSet 中检索参数的连接字符串必须与用来通过 CacheParameterSet 来存储这些参数的连接字符串完全相同。语法不同的连接字符串即使语义相同,也不会被认为是匹配的。
6. 未解决问题