现在的位置: 首页 > 综合 > 正文

从Delphi 8中选择一种数据库连接方式访问IBM DB2 UDB

2013年10月13日 ⁄ 综合 ⁄ 共 3598字 ⁄ 字号 评论关闭

 本文向您说明了在Delphi把应用程序连接到DB2的三种方法中如何确定最好的一种。

 

简介

有三种主要的方法将Borland Delphi 8 for Microsoft.Net Framework连接到IBM DB2 通用数据库(UDB):通过老的Borland Database Engine(BDE),较新的dbExpress,或者最新的ADO.NET技术。本文中,我将帮助您为应用程序选择一种恰当的连接方法。同时,我会就如何使用各种数据库引擎以达到最好的系统性能给出一些提示。

 

新的应用程序还是升级?

您需要马上考虑的首要问题是应用程序将使用“传统”的Visual Component LibraryVCL)还是本机的.NET Framework库。

 

表一概述了不同的数据库驱动库和两种框架之间的兼容性。您可以看到使用BDE或者dbExpress组件意味着必须使用Delphi VCL。但是ADO.NET库可以被任何Delphi 8应用程序使用(通过代码)。

 

另外一个关键点是性能。我们将看到,尽管ADO.NET库对于大多数交互式任务已经完全足够了,但对于那些要求高性能的系统来说,Borland dbExpress for .NET驱动的速度更快。

 

1:对数据库技术的支持概要

 

BDE

dbExpress

ADO.NET

Delphi 7

VCL

不建议使用

支持

不可用

Delphi 8

VCL.NET

不建议使用

支持

通过代码可用

Delphi 8

Windows Forms

And Web Forms

不可用

不可用

支持

 

ADO.NET

Delphi 开发人员来说,ADO.NET是一种“新”的数据库连接方式。ADO.NET使用百分之百的托管代码驱动程序,因此在您的应用程序和DB2数据库驱动程序库之间没有任何Win32代码。由于ADO.NET使用本机.NET程序集,因此,仅仅通过拷贝一些DLLs就可以安装到您的应用程序中。

 

1.使用ADO.NETDB2进行数据连接的两种方法

有两种不同的方法来使用ADO.NET:通过DB2Command组件直接操作服务器,或者通过未连接的DataSet

 

通过代码直接操作

DB2Command组件提供了最佳的性能,但它们必须通过程序代码来使用。同执行简单的查询语句一样,DB2Command也可以执行修改、插入和删除操作,还可以执行存储过程。

 

比如,当您创建一个通用的数据库存储层以便将对象映射到数据库时,这些命令就特别有用。

 

对于使用SELECT语句的DB2Command组件,DataReader对象提供了一种简单的方法来处理返回的数据。DataReader是只读的,并且只允许在结果集中向前移动:即只有Next方法,而没有Prior方法。但由于这个组件运行速度快并且只需要占用服务器很少的处理资源,它是制作数据报告的最快速方法。

 

通过组件实现互操作

尽管DB2CommandDataReader组件的速度很快,但它们必须在程序代码中使用,并且只能向前读取数据。为了在网格(grid)中使用数据,也就是用户希望向后移动时,就必须使用几种数据缓存。

 

为了这个目的,ADO.NET提供了DataSet组件。DataSet组件存储一个或多个表格中的数据,作为XML数据存储器中的对象集合。.NET Framework中的Windows FormsWeb Forms组件可以直接绑定到这些对象上。

 

由于DataSet将数据缓存在本地,因此它的速度并不是特别的快:您的应用程序需要用足够多的数据行填充缓存以便显示在用户界面中,对于速度较慢的链接这可能要花费一点儿时间。如果应用程序需要频繁的在数据中翻页,使用DataReader组件或者服务器中的存储过程可能更好一些。

 

采用Windows FormsWeb Forms的数据绑定机制比VCL使用的方法广泛的多。通过程序代码,几乎任何可以在运行时设置的属性都可以绑定到任一个集合类。虽然这种机制非常灵活,但不同方法的使用意味着那些依靠VCL组件绑定到DB2数据的程序需要大量的被重写。

 

在现有的应用程序中使用ADO.NET

尽管ADO.NET.NET Framework的一部分,但一些交互式组件,例如DataSet,不能被放置在VCL.NET表单中。

 

但是,所有的ADO.NET组件都可以通过程序代码被使用,还有一个专门的新组件可以用来将数据感知的VCL.NET组件连接到ADO.NET数据源。TADONETConnectorDelphi 8中缺省不被安装,但它是一个非常有用的组件,可以在VCLADO.NET之间架起桥梁。

 

2.TADONETConnectorADO.NET(左)和VCL用户界面组件(右)间架起桥梁

 

要安装TADONETConnector,从Delphi 8的菜单中选择Component | Installed .NET Compoents,然后在对话框中选择.NET VCL Componets页面。选择Add,浏览至您的Program Files目录中的Borland/BDS/2.0/Bin目录。选择Borland.Vcl.Design.AdoNet.dllTADONETConnector组件在工具面板(tool palette)中可用。

 

对于使用ADO.NET而不是BDE来存取DB2数据的程序来说,通过采用TADONETConnector将有可能保持现有的Delphi程序用户界面不变,但可以在(例如)DataModules中添加代码。

 

注意TADONETConnector组件是一个用于DataSet的瘦包装器,DataSet是一个ADO.NET中的组件,它将数据缓存在本地工作站中。这也就是说,虽然您可以双向移动记录指针,但对于使用批量数据,这并不是一种最快的方法。如果性能因素很重要,您也许会觉得最好还是重写应用程序,以便使用.NET DataReader直接访问DB2

 

ADO.NET的不同风格

正如我在前一篇文章中讨论过的,ADO.NET的通用实现拥有一系列特定于数据库的组件,它们是为各种数据库服务器定制的。对DB2来说,这些组件是DB2客户端库for the .NET Framework的一部分,包括诸如DB2DataReader等组件。

 

这也就是说,虽然数据访问组件表现出专门针对DB2的特性,但同时也意味着如果需要使用不同的数据库,应用程序将不得不被重写。

 

Borland有一种使用ADO.NET的更一般的方法。Borland Data Provider(BDP)是一个可以处理多种不同数据库服务器的程序库。

 

3.Borland Data Provider是一组基于ADO.NET并且不绑定到任何特定数据库的通用组件

这也就是说,将一个使用BDP的应用程序从(比如说)Microsoft SQL Server转移到IBM DB2 UDB,仅仅只需改变应用程序配置中的连接字符串。假如应用程序没有依赖特定于服务器的特性比如高级存储过程,它就可以不加更改的运行。

 

使用BDP提供了最好的灵活性。也就是说,如果以后决定将数据库升级到DB2,应用程序可以单独升级以使用.NET

 

dbExpress

Delphi中访问DB2数据最快的方法是采用dbExpress。同ADO.NET中的SQLCommand组件类似,使用dbExpress进行数据检索提供了一个只读并且只能向前移动的结果集。

 

4.DB2的两层数据访问,VCL.NET中的TSimpleDataSet是最简单的组件,它的速度也很快

 

 

如果您想通过dbExpress浏览、更新DB2的数据,就必须使用ClientDataSet组件在本地缓存数据。在Delphi 7中做这件事情最简单的方法是通过TSimpleDataSet组件,它包括了所有必须提供的组件,这些组件可以交互的检索和更新数据。使用TSimpleDataSet甚至比使用ADO.NET组件还要简单。

 

由于dbExpress for .NET是一组VCL组件,因此只可能在VCL表单或者数据模块中使用,它不能在Windows Forms或者Web Forms中直接使用。但对于那些对性能有很高要求,尤其是对于仅需要只读和前向移动记录功能的任务来说,dbExpress是速度最快的选择。

 

Borland Database Engine(BDE)

古老的Borland Database Engine的历史可以回溯至Delphi问世以前。第一个版本是在1992年作为IDAPI for Quattro Pro for Windows而发布的。以后经过多次升级,尤其是1995年升级到32位的Windows平台。

 

Borland已经连同Delphi 8一起发布了BDE.NET托管版本,这个版本允许本机的.NET应用程序使用较老的ParadoxdBASE格式的数据文件。该

抱歉!评论已关闭.