在SQL Server中编写通用数据访问方法
2008-04-02 10:35:18来源:互联网 阅读 ()
在负责咨询工作的过去 6 年中,我曾多次听说关于数据访问和操作方面的问题,他时刻困扰着用户:“如何编写应用程式,以便只需对其进行很少的改变或不进行改变即可使用数据库服务器 x、y 和 z?”由于知道数据访问层仍然是现代应用程式的最关键部分,并且通常是经验不足的研发人员的头号敌人,因此我的第一反应始终是:根本办不到!
面对着人们惶惶不安的面孔连同“使用 Microsoft 在 ADO 中提供的通用数据访问方法如何?”这样的问题,我决定针对此问题提供更周详的说明连同建议的解决方案。
问题在于,假如应用程式是较小的原型,或假如并发用户较少并且数据访问逻辑比较简单,那么即使您选择下面这些最简单的方法,也不会碰到任何问题:使用 RAD 工具(如 Data Environment in Microsoft® Visual Basic® 6.0),或某些“一揽子”解决方案(如 ActiveX® Data Control 和其他第三方组件),这些解决方案通常会隐藏应用程式和特定数据源之间进行的复杂交互。然而,当用户数量增加使得必须解决并发操作问题时,由于频繁使用动态记录集、服务器端光标连同不必要的锁定策略,导致出现许多性能问题。为达到用户目标而必须对系统所做的设计和代码更改将花费您大量的时间,因为您从开始时就没有考虑过这一问题。
使用通用数据访问方法
在将ADO可靠地并入MDAC(Microsoft Data Access Components 2.1 版)后Microsoft掀起了通用数据访问的使用高潮。其主导思想是向研发人员展示,通过使用简单的对象模型(“连接”、“命令”和“记录集”),能够编写出能够和各种不同的数据源(无论是关系数据源还是非关系数据源)连接的应用程式。文档(连同当时的大多数文章和示例)中通常未曾提及的是,即使使用相同的数据访问技术,各种数据源的可编程性和特征也千差万别。
其结果是,在需要从多个数据源获取数据的应用程式中,最简单的方法是使用任何数据源所提供的功能的“一起点”,但因此会失去使用数据源特定选项的好处,即为访问和操作各种 RDBMS 中的信息提供最好方法。
我对该方法始终存在的怀疑是,经过和我的客户进行更周详的分析后,我们通常一致认为和应用程式中处理显示和业务逻辑的其他部分相比,和数据源进行交互的只是应用程式很小的一部分。通过进行精心的模块化设计,能够将 RDBMS 特定代码隔离在一些容易互换的模块中,从而避免对数据访问使用“通用”方法。然而,我们能够使用很特定的数据访问代码(根据数据源的不同,使用存储过程、命令批处理和其他特性),而不触及其他大多数应用程式代码。这总是提醒大家:正确的设计是编写可移植的有效代码的关键。
ADO.NET 将一些重要的变化引入到数据访问编码领域,如专用 .NET 数据提供程式这样的概念。使用特定的提供程式,能够绕过为数众多但有时没必要的一系列软件接口和服务(他们是 OLE DB 和 ODBC 层在数据访问代码和数据库服务器之间插入的内容),从而以最好方式连接到数据源。但每个数据源仍然存在不同的特征和特性(具备不同的 SQL Dialect),且编写高效的应用程式仍然必须使用这些特定特征而不是“一起点”。从可移植性观点看来,托管和非托管的数据访问技术仍然很类似。
除“利用数据源的唯一特征”外,编写良好数据访问层所必需的其他规则对每个数据源通常都是相同的:
- 在可能的情况下使用连接池机制。
- 节约使用数据库服务器的有限资源。
- 注意网络的往返。
- 在适当的情况下,增强执行计划的重复使用率并避免重复编译。
- 使用适当的锁定模型管理并发性。
从我使用模块化设计方法的个人经验来看,整个应用程式中专用于处理特定数据源的代码量不会超过总量的 10%。显而易见,这比仅仅更改配置文档中的连接字符串更复杂,但我认为,这样做会获得性能收益,因此这是个可接受的折衷办法。
使用基本接口
此处的目标是使用抽象,并将特定于特别数据源的代码封装在类层中,从而使应用程式的其他部分单独于后端数据库服务器或免受其影响。
.NET Framework 的面向对象这一特性将在该过程中为我们提供帮助,使我们能够选择要使用的抽象级别。选项之一是使用每个 .NET 数据提供程式都必须实现的基本接口(IDbConnection、IDbCommand、IDataReader 等)。另一个选项是创建一组类(数据访问层),用于管理应用程式的任何数据访问逻辑(例如,使用 CRUD 范例)。为检查这两种可能性,我们首先从基于 Northwind 数据库的订单输入应用程式示例入手,然后插入和检索不同数据源中的信息。
数据提供程式基本接口标识应用程式和数据源进行交互通常所需的典型行为:
- 定义连接字符串。
- 打开和关闭和数据源的物理连接。
- 定义命令和相关参数。
- 执行能够创建的不同种类的命令。
- 返回一组数据。
- 返回标量值。
- 对数据执行操作但不返回任何内容。
- 对返回的数据集提供只向前型访问和只读型访问。
- 定义使数据集和数据源(数据适配器)的内容保持同步所需的一组操作。共4页。 1 2 3 4 :
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: SQL Server 2005中Tempdb变化分析
下一篇: 升级SQL Server数据库系统
- 在SQL Server中编写通用数据访问方法 2009-05-12
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash