Enterprise Library 数据访问应用程序块介绍

本文维护在:http://wiki.entlib.net.cn/EntlibHelp31DataAccessApplicationBlock.ashx
如果有问题,请登录 .NET 企业库技术论坛(http://forum.entlib.net.cn)

Enterprise Library 数据访问应用程序块简化了实现常规数据访问功能的开发任务。应用程序可以在各种场景中使用此应用程序块,例如为显示而读取数据、传递数据穿过应用程序层( application layers)、以及将修改的数据提交回数据库系统。应用程序块包含对存储过程和内联 SQL 的支持。常规内部(housekeep)处理,如管理连接、创建并缓存参数,都封装在应用程序块的方法中。换句话说,数据访问应用程序块在简单易用的类中 提供了对 ADO.NET 的最常用的特性的访问;这提高了开发人员的工作效率。

ADO.NET 2.0 提供了如 DbCommand 类和 DbConnection 这样的类,这些类有助于从任何特定数据库实现中抽象出数据提供程序。数据访问应用程序块利用了这些类,并且提供了加强支持数据库特定特性封装的模型,例如 参数发现和类型转换。因此,应用程序可以在不修改客户代码的情况下从一个数据库移植到另一个数据库。数据访问应用程序块包括一个抽象基类,它定义了一个通 用的接口,并提供了许多在 ADO.NET 2.0 中可用的数据访问方法所需要的实现。

应用程序块还包含了专用于 Microsfot SQL Server、Microsoft SQL Server CE、和 Oracel 的类。这些类完成对特定数据库类型的操作。应用程序的代码只为一种数据库而编写,例如 SQL Server,可以看到有许多为另一种数据库编写的代码是一样的,例如 Oracle 。

数据访问应用程序块的另一个特性是,应用程序代码可以由一个 ADO.NET 连接字符串的名字,如"Customer" 或者 "Inventory" ,而引向一个特定的数据。应用程序代码可以指定一个数据库命名实例,并传递此参数到 DatabaseFactory.CreateDatabase 方法。每个命名数据库都有连接字符串保存在配置文件中。通过修改配置文件中的设置,开发人员可以在不同的数据库配置下使用应用程序而不需要重新编译代码。

数据访问应用程序块提供了下列好处:

  • 使用了由 ADO.NET 2.0 提供的功能并与其一起使用,可以同时使用 ADO.NET 和应用程序块的功能。
  • 减少编写重复代码完成标准任务的需要。
  • 有助于维护一致的数据访问实践,无论是在应用程序内部还是企业间。
  • 减少了变更数据库类型的困难。
  • 将开发人员从学习用于不同数据库的不同编程模型中解放出来。
  • 减少了在开发人员移植应用程序到另一种数据库时不得不编写的代码的数量。

普通场景

开 发人员经常编写使用数据库的应用程序。因为它太普遍了,开发人员可能会发现他们为每个应用程序在重复编写同样的代码。另外,这些应用程序可能需要与不同的 数据库一起工作。尽管任务是相同的,代码也必须适配以适应每个数据库的编程模型。数据访问应用程序块通过提供完成最常用的数据访问任务的逻辑来解决这些问 题。开发人员仅需要做如下事情:
  • 创建一个 database 对象。
  • 提供用于命令的参数,如果需要的话。
  • 调用适当的方法,这些方法已经过性能优化,并且是可移植的。

数据访问应用程序块可以透明的与 SQL Server、SQL Server CE、和 Oracle 数据库一起工作。

示例应用程序代码

下列代码展示了如何调用一个存储过程并返回一个 DataSet
C#
Database db = DatabaseFactory.CreateDatabase();

DbCommand dbCommand = db.GetStoredProcCommand("GetProductsByCategory");

// Retrieve products from category 7.
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, 7);

DataSet productDataSet = db.ExecuteDataSet(dbCommand);
Visual Basic
Dim db As Database = DatabaseFactory.CreateDatabase()

Dim dbCommand As DbCommand = db.GetStoredProcCommand("GetProductsByCategory")

' Retrieve products from the category 7.
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, 7)

Dim productDataSet As DataSet = = db.ExecuteDataSet(dbCommand)

读者需求

此手册的目标读者是软件架构师和软件开发人员。要从此手册中获得最大好处,将需要理解下列的技术:
  • Microsoft Visual Studio 2005 开发系统 (下列任何版本):
    • Visual Studio 2005 专业版
    • Visual Studio 2005 团队系统版
    • Visual Studio 2005 标准版
  • .NET Framework version 2.0
  • Microsoft SQL Server, Microsoft SQL Server CE 或者 Oracle 数据库

迁移到 Enterprise Library 3.1 — May 2007

一般情况下,使用数据访问应用程序块的 January 2006 发布构建的应用程序不需要修改任何代码就能使用 May 2007 发行的功能。可能需要更新引用以指向新的程序集,并更新配置文件以引用正确的应用程序版本。

已修改某些 Database 类的方法以使用 .NET Framework 2.0 的 TransactionScope 类。这些方法,例如 ExecuteNonQuery ,已通过用 GetOpenConnection 方法替换掉 GetConnection 方法来修改为识别 TransactionScop 实例的有效时机。如果编写了一个继承自 Database 类的类,将需要考虑这些变化来重写代码。如果继续使用 GetConnection 方法,将会收到一个编译错误。

另外,如果应用程序使用了 ExecuteXmlReader 方法,可能需要重写代码以测试查看在关闭连接前 TransactionScope 实例是否是有效的。

更多信息,请参见使用 TransactionScope 类和如何使用 ExecuteXMLReader 方法的 XML 示例的获取多行数据。

新的特性

Enterprise Library 3.1 – May 2007 支持 SQL Server Compact Edition (CE)。SQL Server CE 提供了精减的关系数据库的特性,以用于桌面和移动应用程序,这些程序需要本地数据库存储但又不需要完整的 SQL Server 的功能。更多信息,请参见使用 SQL Server CE 。

Database.UpdateDataSet 方法有一个新的使用 updateBatchSize 参数的重载。设置 updateBatchSize 参数为一个正整数值将使 DataAdapter 对象以指定大小为批次发送更新到数据库。这将减少数据库往返的次数。

系统需求

要运行数据访问应用程序块,你需要下列系统:
  • Microsoft Windows XP Professional, Windows Server 2003, 或者 Windows Vista 操作系统
  • Microsoft .NET Framework 2.0
  • Microsoft Visual Studio 2005 开发系统 (任何下列版本):
    • Microsoft Visual Studio 2005 Standard Edition
    • Microsoft Visual Studio 2005 Professional Edition
    • Microsoft Visual Studio 2005 Team Edition for Software Developers
    • Microsoft Visual Studio 2005 Team Edition for Software Testers
    • Microsoft Visual Studio 2005 Team Edition for Software Architects
    • Microsoft Visual Studio 2005 Team Suite
  • 运 行受 .NET Framework 2.0 数据提供程序支持数据库的数据库服务器。包含 SQL Server 2000或更新版本,SQL Server CE 和 Oracle 9i 或更新版本。运行服务器也可以运行受用于 OLE DB 或 ODBC 的 .NET Framework 2.0 数据提供程序支持的数据库。

数据访问应用程序块依赖

数据访问应用程序块依赖于 Enterprise Library 中的其他代码:
  • 内核库功能。Enterprise Library 内核提供了服务,如度量和配置,是一个所有 Enterprise Library 应用程序块的共享依赖。内核库功能包含在程序集 Microsoft.Practices.EnterpriseLibrary.Common.dll 中。
  • ObjectBuilder 子系统。ObjectBuilder 子系统完成所有重复且必要的和销毁对象实例的任务,同时提供了高度的灵活性。Enterprise Library 将 ObjectBuilder 子系统用于如注入配置到程序块的类中以及连接度量类到应用程序块这样的任务。ObjectBuilder 子系统包含在程序集 Microsoft.Practices.ObjectBuilder.dll 中。

数据访问应用程序块使用 ADO.NET 来进行连接字符串的管理。应用程序块提供了使用配置信息创建 database 对象的 DatabaseFactory 类。配置信息由 ADO.NET 管理的连接字符串和其他和程序块配置信息。

注意:默认情况下,应用程序块的配置信息源是应用程序的配置文件。使用 Enterprise Library ,可以修改配置信息源。例如,可以选择将应用程序块的配置设置保存到 SQL 数据库中。Database 工厂类首先尝试从默认配置源中读取连接字符串信息。如果没有,Database 工厂类再尝试从应用程序配置文件中的 ADO.NET 管理配置节中读取连接字符串信息。

通常,使用配置数据来管理连接字符串。另一种就是,可以使用构建函数,并提供给它连接字符串和数据库类型来在应用程序中创建一个数据库对象。

修改数据访问应用程序块配置信息的推荐方法是使用 Enterprise Library 配置控制台。

数据访问应用程序块的文档

除了简介以外,文档还包括了下列部分:
  • 使用数据访问应用程序块开发应用程序。此节被分割成了几个子章节。输入配置信息描述了如何配置应用程序块。添加应用程序代码描述了如何为 使用数据访问应用程序块来准备应用程序。下一小节,关键场景,示例了如何使用应用程序块完成绝大多数典型的数据访问操作。最后一小节,开发任务细节,包括 关于创建 database 对象、创建 command 、处理参数和处理异常的深度信息。
  • 数据访问应用程序块的设计。此节描述了设计应用程序块及相关的决定。
  • 扩展和修改数据访问应用程序块。此节描述了如何通过添加自己的数据库提供程序来扩展应用程序及给出了修改源代码的建议。
  • 部署和操作。此节描述子如何部署和更新应用程序块程序集,还包括关于配置和 SQL Server 安全的信息。
  • 快速入门。此节描述了如何安装和配置快速入门应用程序,还包括了一系列的示范了如何添加普通数据访问操作到应用程序中的漫游。

更多信息

更多信息,请参见下列资源:

1.1 - 场景和目标

数据访问应用程序块为解决开发人员在编写数据库应用程序时所面对的绝大多数普通任务而设计。这些任务根据场景进行了组织。每个场景都人出了一个真实世界条件下的示例,例如从分类中获取信息或者未完成银行事务,描述了条件所要求的数据库功能,并展示完成任务的代码。

根据场景组织这些任务的目的是给代码一些上下文,来替代展示一组孤立的方法,而没有它们最好使用在哪儿的意义,场景为代码提供了一种设置,将它放置在其应用程序必须访问数据库的许多开发人员所熟悉的条件中。

场景如下:
  • 使用 DataReader 获取多行数据
  • 使用 DataSet 获取多行数据
  • 运行一个命令并获取输出参数
  • 运行一个命令并获取单值项
  • 在一个事务中执行多个操作
  • 从 SQL Server 中获取 XML 数据
  • 使用包含在 DataSet 对象中的数据更新数据库

何时使用数据访问应用程序块

数据访问应用程序块包含少量简化绝大多数访问数据库的普通方法的方法。每个方法都封装了获取数据所需要的逻辑以及管理数据库连接。如果应用程序中使用标准的数据访问技术就可以考虑使用应用程序块。

应用程序块补充了 ADO.NET 2.0 中的代码,以让你在不同的数据库类型中使用同样的代码。它包含了用于 SQL Server 和 Oracle 数据库的类。这些类包含了提供特定数据库特性如参数处理和游标的实现的代码。另外,GenericDatabase 类允许使用应用程序块与任何配置的 ADO.NET 2.0 DbProviderFactory 对象一起使用。可以通过添加新的惟数据库特定特性或者提供已有数据库自定义实现的数据库类型来扩展应用程序块。仅仅需要在在一个用于目标数据库的 ADO.NET 2.0 DbProviderFactory 类。

何时直接使用 ADO.NET

数 据访问应用程序块是 ADO.NET 的一个补充;而不是替换。应用程序块提供了简化和方便,同时帮助开发人员以最佳实践使用 ADO.NET 。如果应用程序需要以特殊的方法获取数据,或者代码需要定制以利用特定于特定数据库的特性,使用 ADO.NET 可能更适合。
posted @ 2007-11-14 23:08  Dorian Deng  阅读(625)  评论(0编辑  收藏  举报