ASP.NET(C#)

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

模块名称:Data Access Application Block

1. 概述 Data Access Application Block 是一个 .NET 组件,包含优化的数据访问代码

2. 功能说明

2.1.可以帮助用户调用存储过程以及向 SQL Server 数据库发出 SQL 文本命令。它返回 SqlDataReaderDataSet 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 类提供了五种静态方法:ExecuteNonQueryExecuteDatasetExecuteReaderExecuteScalar ExecuteXmlReader。实现的每种方法都提供一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式注意事项`

 

3.2.1. SqlHelperParameterCache类:提供参数发现和缓存功能。

3.2.2. SqlHelperParameterCache 类提供命令参数缓存功能,可以用来提高性能。该类由许多 Execute 方法(尤其是那些只运行存储过程的重写方法)在内部使用。数据访问客户端也可以直接使用它来缓存特定命令的特定参数集

 

 

 


 

4.使用方法:

调用存储过程或 SQL 文本命令,指定参数详细信息,返回 SqlDataReaderDataSet XmlReader 对象。

       4.1. Data Access Application Block 是如何来执行数据库命令和管理参数?如图显示了 Data Access Application Block 的主要元素。

              调用存储过程或 SQL 文本命令, 指定参数详细信息。返回 SqlDataReaderDataSet 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. 未解决问题

 

posted on 2005-01-25 12:32  battlerstar  阅读(531)  评论(0编辑  收藏  举报