ASP.NET2.0:AdventureWorks贸易系统
使用数据访问块实现数据访问
ADO.NET提供了丰富的,能够以多种方式获取和显示数据的功能。即使使用ADO.NET提供的灵活性,但有时候开发人员仍然会发现自己一遍又一遍的在重复编写相同的代码。例如,每个数据驱动的应用程序都需要访问数据库,那么开发人员则要编写代码来连接数据库,打开数据库,执行SQL语句或者存储过程,在客户应用程序中获取结果,关闭数据库。开发人员将被迫在所开发的几乎任何应用程序中编写这些重复性代码,而这对于核心业务用户没有任何真正的价值。在开发的每个应用程序中可能唯一可能不同的代码是,SQL语句或者存储过程名称,命令参数和连接字符串。只要能够参数化这些变量,就能够将多数重复性代码抽象到可重用类中,那么在多个应用程序中都能够使用这些类。微软已经以EntLib数据访问块的形式完成了这件事。本实例将使用数据访问块来与数据库交流。
什么是数据访问块
正如前文提到的,当开发数据库应用程序时,数据访问块用于完成开发人员所面对的多数常见任务。数据访问块通过提供一组封装的方法能够大大简化访问数据库的多数常见方法。每个方法都封装了实现返回数据所需的逻辑,同时,还能够管理数据库连接。另外,通过编写能够跨不同数据库类型使用,而不必修改代码的数据访问代码,数据访问块对ADO.NET 2.0提供了补充。这些类包括了提供给专用数据库实现功能(例如参数处理和游标)的代码。
此外,数据访问块还为SQL Server和Oracle提供了专用的继承类。另外,GenericDatabase类还允许通过任何经过配置的ADO.NET 2.0中的DbProviderFactory对象使用应用程序块。开发人员通过添加实现新的包括专用数据库功能的数据库类型,或者提供了现有数据库的自定义实现来扩展应用程序块。
数据访问块2.0版本较1.0斑斑有了革命性改进,其设计重新设计用于使用ADO.NET 2.0功能。开发人员可以从www.microsoft.com/downloads下载和查找EntLib数据访问块。
使用数据访问块的步骤
为了使用数据访问块,需要执行以下步骤:
1. 在解决方案中添加对Microsoft.Practices.EnterpriseLibrary.Common.dll和Microsoft.Practices.EnterpriseLibrary.Data.dll程序集的引用。使用添加应用选项,导航到<驱动器名称>:\Program Files\Microsoft Enterprise Library January 2006\bin文件夹中,可实现添加对这些程序集的引用。
2. 在Web.config,app.config或者自定义配置文件中添加必要的配置项。为此,将以下<configSections>元素添加到<configuration>元素下:
<configSections>3. 然后还要将<dataConfiguration>元素直接添加到<configuration>元素下,如下所示:
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data" />
</configSections>
<dataConfiguration defaultDatabase=”AdventureWorksDB”/>4. 本实例将AdventureWorksDB数据库标记为默认数据库,其在<connectionStrings>元素中独立声明:
<connectionStrings>5. 在代码中导入数据访问块的核心命名空间Microsoft.Practices. EnterpriseLibrary.Data。
<add name="AdventureWorksDB" providerName="System.Data.SqlClient"
connectionString="server=localhost; database=AdventureWorks; UID=user; PWD=word; "/>
</connectionStrings>
6. 在核心命名空间下开始编写类代码。
既然读者已经了解了EntLib数据访问块的基础知识,那么下面可以学习一下数据访问块中的关键类。
Database对象
任何时候使用数据访问块,首先必须处理Database类。Database类表示数据库以及在数据库中执行命令的方法。Database对象公开了以下方法,使用这些方法能够对数据库执行CRUD操作。

既然读者已经了解了Database类中的方法,那么就可以重新考虑数据访问层ProductCategory类的GetProductCategories()方法,以便理解集成数据访问块的方法:
IList<ProductCategory> list = new List<ProductCategory>();首先,调用DatabseFactory类的CreateDatabase()方法以获取Database对象实例。正如名称暗示的那样,DatabaseFactory类包括了创建Database对象的工厂方法。注意,CreateDatabase()是一个重载方法,当调用无参数的CreateDatabase()方法时,该方法将返回默认数据库。为此,可在Web.config文件中,将defaultDatabase属性设置为适当的数据库配置键,如下所示:
Database db = DatabaseFactory.CreateDatabase();
string storedProcedureName = "GetProductCategories";
DbCommand dbCommand = db.GetStoredProcCommand(storedProcedureName);
using (IDataReader reader = db.ExecuteReader(dbCommand))
<dataConfiguration defaultDatabase = "AdventureWorksDB" />当创建Database对象实例后,接着可调用GetStoredCommand()方法,以便生成ADO.NET 2.0的DBCommand对象。此后,将DbCommand作为参数传递给ExecuteReader()方法,并利用该方法执行存储过程。
0
相关文章