DB2和Visual Studio .NET开发慨述
概述
DB2 拥有广泛的开发拥护者,涵盖了 .NET 和 J2EE™ 平台。就应用程序开发 API 和应用程序开发工具而言,这些开发人员具有他们自己强烈的偏好。IBM 一直都意识到这两大阵营的重要性,并同时迎合两方的需要。
对于 Windows® Java™ 开发人员,IBM 具有 JDBC™ 和 JCC 驱动程序方面的强大产品,单独的 DB2 Development Center,以及用于 WebSphere® 和 Rational Studio® IDE 的集成插件。
对于 .NET Windows 开发人员,IBM 意识到有更紧密地集成到该环境中的强烈需求。IBM 强烈承诺支持 .NET 平台,特别是 Visual Studio .NET,从 2002 年初以来,后者就已经是 Microsoft Visual Studio Integrator Program(VSIP)的组成部分。IBM 已经交付了一个本机 .NET 托管提供程序和一套紧密集成的 Visual Studio 2002 和 2003 IDE 工具。
本文主要关注 IBM 当前在 Windows 客户平台上对于 .NET 的支持。
集成功能
一些 .NET 平台和 Visual Studio .NET 上的关键集成部件包括:
DB2 .NET 托管提供程序(DB2 .NET Managed Provider) - 该本机 DB2 .NET 托管提供程序使应用程序开发人员可以使用标准 ADO.NET 编程模型构建并运行应用程序。它为 DB2 提供了更好级别的支持,胜过 DB2 的 ODBC 和 OLE DB 通用(generic)托管提供程序。 解决方案资源管理器(Solution Explorer) - 该 DB2 数据库项目模板支持将基于脚本的开发作为 Visual Studio 解决方案的标准集,支持多个配置、源控制管理、项目和项目项构建次序,以及使用内建编辑器和调试器编辑和调试 SQL 脚本。 服务器资源管理器(Server Explorer) - 该 IBM Explorer 提供与 Visual Studio 服务器资源管理器相同的观感(look and feel),支持使用拖放功能进行目录访问和快速的 .NET 应用程序开发。 SQL 向导(SQL Wizards) - 这组功能丰富、易于使用的向导支持通过 Solution Explorer 或 Server Explorer 创建新的服务器端表、视图、索引、触发器、过程和函数。 SQL 编辑器(SQL Editor) - 这个内建的 Visual Studio 文本编辑器已经扩展为提供对 DB2 SQL 脚本的本机支持,具有“智能感知(intelisense)”和语法的彩色化显示(colorization)以及高级脚本选项。 SQL 调试器(SQL Debugger) - 这个内建的 Visual Studio 调试器已经扩展为提供对 DB2 SQL 例程的调试支持,允许将跨平台 SQL 存储过程的源代码级别调试作为 DB2 数据库项目的一部分。 动态帮助(Dynamic Help) - 这个 Visual Studio 上下文敏感帮助已经扩展为提供 DB2 .NET 托管提供程序和 Visual Studio AD 工具的在线帮助。 DB2 工具(DB2 Tools)工具栏 - 可以使用 DB2 Tools 工具栏直接从 Visual Studio IDE 启动各种 DB2 开发和管理中心。可用性
最初,DB2 AD Tools for Visual Studio .NET 是作为 DB2 和 DB2 Connect V8.1.2 的组成部分发布的。这里所描述的功能是于 2004 年 10 月发布的 DB2 和 DB2 Connect V8.2 中的一部分。
平台支持矩阵
下表有助于说明每种 DB2 服务器平台的支持级别。请注意“分布式”列是指 Windows 和 UNIX® 服务器平台。
表 1. DB2 平台支持矩阵
功能 z/OS iSeries® 分布式 服务器级别V6, V7, V8V5r1, V5r2V8客户机级别Connect V8.2Connect V8.2ADC V8.2托管提供程序YesYesYes工具箱 ADO.NETYesYesYesSQL 调试器NoNoYes数据库项目YesYesYesIBM ExplorerYesYesYes表向导YesYesYes索引向导YesYesYes触发器向导YesYesYesSQL 过程向导YesYesYesCLR 过程向导NoNoYesSQL 函数向导Yes(标量)Yes(标量)Yes(标量/表)IIS WebMethodsYesYesYesWAS Web 服务NoNoYes
IBM Informix® .NET 本机数据提供程序是与 IBM Informix Client SDK 一起发布的。SDK 的 2.90 版本包含了对 IDS .NET 托管提供程序有限的工具(tooling)支持。Visual Studio 工具箱的 Data 选项卡已经扩展为列出 IDS ADO.NET 对象。您可以在 Win 和 Web 表单容器上拖放这些对象。您还可以使用定制(custom)编辑器定制这些对象。
在安装 IDS 客户机 SDK 时,将自动安装和配置 .NET 托管提供程序和 Visual Studio 工具。
IBM DB2 Everyplace 支持(DB2e)
developer 上的 DB2e 教程
DB2e 托管提供程序有两个版本,即 Data.DB2.DB2e (在 .NET Framework 上运行)和 IBM.Data.DB2.DB2e.CF (在 .NET Compact Framework 上运行)。
仅仅从 V8.1.4 开始,才为 Data.DB2.DB2e 提供程序提供了基本 RAD 工具(tooling)。该工具提供与 VS.NET 数据工具箱(Data Toolbox)的集成,开发人员可以在其中设置 DB2e ADO.NET 对象(如 DB2eConnection、DB2eCommand、DB2eDataAdapter 等等)的属性。
DB2 托管提供程序
DB2 .NET 托管提供程序允许使用标准 ADO.NET 编程模型,开发以数据为中心的应用程序。虽然 .NET 开发人员可以选择使用 ODBC、OLE DB 或本机提供程序来开发他们的 DB2 应用程序,但当谈到 RAD 工具和性能时,本机提供程序就应该是您的第一选择。
提供程序对象模型
像所有其他 ADO.NET 提供程序一样,DB2 托管提供程序实现了相同的标准 ADO.NET 类集和方法集。这些类是在 IBM.Data.DB2 名称空间下定义的。
图 1. DB2 ADO.NET 对象模型
主要的类集包括:
DB2Connection - 该数据连接类支持您指定用于连接目标 DB2 服务器的连接串。默认启用连接池(connection pooling)。open 和 close 方法调用实际上可能转换成在应用程序连接池中保留和释放一个实时(live)连接。
DB2Command - 该命令对象支持使用数据连接对象执行任何受支持的 SQL 语句或存储过程。命令执行还支持可选的超时(timeout)值。
DB2DataAdapter - 该数据适配器对象包含四个可选命令,用于可能成为 SQL 语句或存储过程调用的选择、插入、更新和删除操作。
DB2DataReader - 您一般使用 DB2DataReader 对断开连接的结果集进行单向(forward-only)的快速访问,这些断开连接的结果集是执行 SQL 语句或存储过程调用所返回的。
性能优势
正如前面所说的,虽然您可以选择使用 ODBC 或 OLE DB 提供程序,但是 .NET 本机提供程序将产生最佳性能,因为它消除了 DB2 上额外的 ODBC、OLE DB 层。
本实验室已经对这三种支持的托管提供程序进行了内部性能测试,我们在不同行数中测试了大小不同的两行的数据检索。结果清楚表明本机 DB2 .NET 托管提供程序提供了最佳的性能数据。
DB2 .NET 托管提供程序中所包含的一些性能增强包括 MTS 支持、松散耦合事务、延迟加入(delayed enlistment)等。
图 2. DB2 提供程序性能
脚本编制向导
DB2 V8.2 Development Add-In 新的关键增强之一就是具有一组功能丰富的脚本编制向导,用于为表、视图、触发器、索引、存储过程和函数生成所需的 CREATE DDL。
向导概述
有两个地方启动 DB2 脚本编制向导,分别是从 Solution Explorer 视图中的 DB2 Database Project 和 IBM Explorer 视图中的 DB2 Data Connection。
这些脚本编制向导指导您通过一系列步骤,以定制用于创建新的 DB2 模式对象和例程的 DDL 和 SQL 语句。
当从 IBM Explorer 启动向导时,您可以直接执行所生成的 DDL,或选择将之添加到新的或现有的 DB2 数据库项目中。
当从 Solution Explorer 启动向导时,所生成的脚本就添加到了您的 DB2 数据库项目中,用于稍后的编译或项目构建。这些 DB2 脚本编制向导比用于 SQL 服务器的通用数据库项目将会给予您更大的好处。
表向导(和导入对话框)
该表向导允许生成用于 DB2 服务器家族的 CREATE TABLE DDL。您可以指定高级值选项(identity、generated 等等)、惟一键、外键、主键和检查约束。
表向导的一个关键功能就是可以使用公共导入列对话框从该数据连接中的其他表和视图导入列定义,许多其他插件向导和对话框也使用这个公共导入列对话框。该功能支持克隆表以及定义外键列。
索引向导
索引向导允许定义用于 DB2 服务器家族的 CREATE INDEX DDL。您可以在索引上指定高级选项,以及用 ascending 或 descending order 子句在同一索引中定义多个列。该向导自动检测所索引的基表的列定义。
触发器向导
触发器向导允许定义用于 DB2 服务器家族的 CREATE TRIGGER DDL。您可以为表和视图创建触发器,其中将自动检测表和视图的定义。还支持 Instead Of 触发器。您可以定制所有的触发器 DDL 选项,包括何时触发、频率和动作等。
视图向导
视图向导允许定义用于 DB2 服务器家族的 CREATE VIEW DDL。您可以使用内建模式智能感知支持来轻而易举地为视图定义所需的 SQL 查询。
SQL 过程向导
SQL 存储过程向导允许定义用于 DB2 服务器家族的 CREATE PROCEDURE DDL 和例程体。您可以定义零个或多个结果集,自动发现或导入参数,以及使用模式智能感知来编码例程体。该向导还允许您为 z/OS SQL 存储过程指定高级 SQL 构建选项,或使用连接级默认构建选项。
SQL 函数向导
SQL 用户定义的函数向导允许定义用于 DB2 服务器家族的标量或列表函数的 CREATE FUNCTION DDL 和例程体。返回类型以及所有输入参数都是自动发现的。您可以使用模式智能感知来编码函数例程体。
DB2 数据库项目
通过 Visual Studio Solutions Explorer,您可以创建一个或多个特定于 DB2 的脚本编制项目来管理服务器脚本的执行。脚本文件可以包含任何所支持的 DDL、DML 和 DCL SQL 语句。
项目概述
DB2 数据库项目是一个全功能的 Visual Studio 项目模板,支持多个配置、编译/构建、项目构建次序、源控制管理和版本控制以及启动例程。
您可以使用基于文本的脚本模板创建新的项目项,或直接启动前面详述的任何一种脚本编制向导来为各种 DB2 对象生成所需的 CREATE DDL。
DB2 数据库项目的全功能支持使其远远优于有限的通用 SQL Server 数据库项目。
多个配置支持
Visual Studio 中的解决方案支持多个配置(multi-configuration)选项,其中的项目项可以用不同的项目和项目项属性组来构建,取决于所选的配置。
DB2 数据库项目完全支持这个多个配置功能。在 Linux、UNIX 和 Windows 上应用于 SQL 存储过程的调试构建(build for debug)或发布构建(build for release)利用这一新功能来为这些存储过程生成所需的调试信息。此外,您可以为每个配置指定一组不同的 z/OS® SQL 构建选项和一个不同的目标数据连接,用以编译您的脚本文件。因此,从测试数据连接到产生数据连接,您都可以通过简单的配置名称切换部署相同的脚本集。
项目项构建次序
您的项目脚本项的默认构建次序是按照它们在项目中的添加次序来进行构建。往往,您需要一个不同的基于脚本依赖性的构建次序。例如,需要在创建访问一组表的存储过程之前,先创建这组表。
您可以使用项目项构建次序,这个 DB2 数据库项目独有的功能,来定义特定于配置的脚本项构建次序。
源版本控制
与 Visual Studio 中大多数其他项目模板一样,DB2 数据库项目实现了合适的接口,用于与任何配置的源控制管理系统(如 Clear Case 或 Visual Source Safe)进行集成。
SQL 编辑器
标准的 Visual Studio .NET 文本编辑器和语言服务已经扩展为支持特定于 DB2 的脚本语法色彩化显示、数据连接模式智能感知、高级脚本编制选项和 SQL 代码段插入。
一些高级脚本编制选项包括可以指定可折叠的(collapsible)代码区域(也称作隐藏文本)、编译错误忽略、结果集输出捕获和特定于平台的编译。
启动过程
通过 DB2 数据库项目属性,您可以指定编译数据连接,以及启动存储过程和参数值。当您运行或调试 DB2 数据库项目时,就调用该启动存储过程。默认动作就是在执行存储过程之后进行回滚。这可以使用用户选项 XML 文件来进行修改。
IBM Explorer
IBM Explorer 是一个引入的新视图,用以支持特定于 DB2 的托管提供程序数据连接。该视图为 Server Explorer 数据连接提供更大功能。然而,这一附加功能并没有改变 Server Explorer RAD 编程图。
IBM Explorer 数据连接使用 tables、views、procedures 和 functions 文件夹显示目录信息。除了这些目录文件夹,新的数据适配器文件夹允许定义可重用的 ADO.NET 数据适配器,可跨应用程序与其他团队成员共享这些数据适配器。
发现
在添加数据连接时,您可以添加本地和远程数据库连接。如果在服务器平台上启用了 DB2 Admin Server,就可以发现远程连接。您可以添加本地已编目的远程连接,或者通过仅仅为服务器字段指定 host_name:port_number 进行。
多个命名连接和筛选
使用 IBM Explorer,您可以向同一目标 DB2 服务器和数据库添加多个数据连接,每个都具有一个惟一的名称。多个连接与文件夹级的筛选器相结合,可用于在同一数据库上投影不同的视图。这一筛选功能允许您减少与您应用程序组件相关的目录信息量。
缓存和刷新
IBM Explorer 早期设计目标之一就是使开发人员可以在断开连接的模式下工作。目录信息在客户机工作站进行本地缓存。随后 Visual Studio IDE 的启动将重用该缓存的目录信息。
为了帮助用户识别陈旧数据,在文件夹级别显示了一个时间戳(time-stamp)属性,用以反映检索缓存信息的最新日期和时间。您随时可以选择从服务器刷新该缓存器。
对表和视图的支持
在检索目录数据之前,可能要筛选 tables 和 views 文件夹。通过这些文件夹,您可以启动合适的向导来创建新的表和视图。您可以检索表和视图数据,更改数据,以及将更新传回服务器。您可以删除这些对象或生成 CREATE DDL 脚本,以进一步进行编辑。
关于表和视图的详细视图允许您为这些对象管理索引和触发器。
您可以在窗体设计器上拖放表和视图,以自动生成和配置所需的 ADO.NET 组件托盘对象。
对过程和函数的支持
在检索目录数据之前,可能要筛选 procedures 和 functions 文件夹。您可以通过启动合适的脚本编制向导,直接从这些文件夹创建新的 SQL 过程和函数。您还可以对这些对象执行测试运行。默认情况下,在从 IBM Explorer 执行过程或函数之后,会发出一个回滚。通过在 userOptions.xml 文件中更改合适的值,您可以在执行后强制提交。此外,您可以删除过程和函数,或查看它们的编目源代码,以进一步进行编辑。
您可以在窗体设计器上拖放过程和函数,以自动生成和配置所需的 ADO.NET 组件托盘对象。
可重用的数据适配器
ADO.NET 数据适配器是功能强大的数据对象,因为它们封装了插入、更新、删除和查询操作。开发人员花费了大量时间定义和定制这些数据适配器;然而,不可以在窗体间,跨项目,或在用户间共享它们。
IBM Explorer 数据连接在 DB2 数据连接下引入了这个新的文件夹,允许用户定义和重用数据适配器。相同的 RAD 功能集可用于在 win 和 Web 窗体设计器上拖放这些适配器,以及预览和修改这些数据适配器所检索的数据。
一旦在数据连接中定义了数据适配器,您就可以为这些适配器自动生成数据集,并将数据集定义添加到项目中。该工作的进行不需要在窗体设计器上拖放适配器。然后,您可以在应用程序开发中使用格式化和类型化的数据集,包括可以使用数据窗体向导生成数据窗体。
可重用数据适配器的一个强大功能就是可以将其部署到 DB2 嵌入的 WebSphere 应用程序服务器上,或可以生成 IIS web 方法,用以部署为 web 服务。这一零代码(zero-code)操作支持快速将数据连接 SQL 或 存储过程部署为 Web 服务。
可重用数据适配器的另一有趣功能是可以导入一个或多个数据适配器,以及将其作为 XML 文件导出,以用于与其他用户共享,或用于在源控制管理中进行签入(check-in)/签出(check-out)。
DB2 RAD 和 Visual Studio .NET
DB2 V8.2 Development Add-In for Visual Studio .NET 提供了两个关键的应用程序开发功能:即前面所详述的使用脚本开发服务端模式和逻辑,以及使用快速应用开发(RAD)功能开发客户端或中间层 ADO.NET 应用程序组件。
IBM Explorer 中的拖放
您可以拖动任何一个 IBM Explorer 模式和逻辑对象,然后将之放在 winform 和 webform 设计器上。该拖放(drag-and-drop)操作将自动生成所需的 ADO.NET 连接、命令和数据适配器对象,并将其添加到窗体的组件托盘上。
此外,您可以从您连接的 Adapters 文件夹中拖放预先配置的 ADO.NET 数据适配器,并将其放在组件托盘上。
工具箱控制
在使用基于组件的对象(如窗体或 Web 服务设计器)时,您可以直接从工具箱的 Data 区域拖放对象,并将其放在设计器画布(canvas)上。当 DB2 .NET 托管提供程序在您的系统上注册时,将自动向工具箱添加 DB2Connection、DB2Command 和 DB2DataAdapter 对象。
不像 IBM Explorer 中的拖放,为了进行正确的操作,必须使用下面所列的定制 ADO.NET 编辑器配置工具箱对象。
连接串编辑器
连接串编辑器允许您配置组件托盘 DB2Connection 对象。连接串是基于您所选择的 IBM Explorer 数据连接和所输入的用户名/密码自动生成的。
数据适配器向导
DB2 数据适配器配置向导可用于设置您的组件托盘数据适配器选项,包括数据连接、select 命令、insert 命令、delete 命令和 update 命令。
该向导可以用于定义直接执行 SQL 或调用存储过程的命令。
您还可以通过发现结果集或手工定义一个或多个返回结果集,来定义 select 命令的形式是一条 SQL 语句还是存储过程调用。
对于存储过程,您可以将该存储过程的的输入和输出参数映射到 select 命令中所定义的数据集源列。
命令编辑器
命令编辑器可用于配置组件托盘中找到的 DB2Commands。单独的命令编辑器中使用用于定义各种数据适配器的同一的 UI 元素集。在您的 SQL 语句中找到的 SQL 参数是自动发现的,但也可以手工定义。
生成数据集
一旦配置了数据适配器,您就可以生成数据集定义了,该数据集将存储您的数据适配器断开连接的结果集。生成数据集对话框既允许您生成新的数据集,又支持在现有的项目数据集中包含结果集数据表。
一旦定义了数据集,您就可以选择在组件托盘上包含该数据集对象实例,用以将数据源快速映射到窗体设计器中的窗体控制。
CLR 过程和函数
长期以来,DB2 一直支持大量的存储过程编程语言,包括 C、Java、Perl、Cobol 和 REXX 等等。为了支持所有 CLR 语言,如 C# 和 Visual Basic,添加基于 CLR 的存储过程和函数支持是最自然不过的。
远在包括 Microsoft SQL Server 的任何其他服务器之前,DB2 就发布了对 CLR 存储过程和函数的支持。这包括执行 CLR 过程和函数的引擎支持,使用 DB2Context 对象的托管提供程序支持,以及 Visual Studio AD 工具。
标准 C# 和 Visual Basic 项目列表中添加了一个新的 Visual Studio 项目模板,即 DB2 Class Assembly 项目。该项目模板几乎与 C#/VB Class Assembly 项目一模一样,但增加了对 IBM.Data.DB2 名称空间和程序集的自动引用,以及预装了用于存储过程的类示例。您可以使用该项目模板来定义多个 CLR 存储过程和函数。
一旦编译了 CLR 项目,您就可以生成所需的 DB2 DDL 脚本,以定义一个或多个 CLR 存储过程和函数。内建的 DB2 CLR 过程向导可用于自动检测具有备选 CLR 过程的解决方案中的项目。然后,该 CLR 向导将允许您定制生成的 DDL 和数据类型映射。一旦生成,DDL 脚本就会添加到您解决方案中的一个 DB2 数据项目中,以便稍后进行部署。在该 DB2 数据库项目的构建过程中,该项目程序集还将添加到必须部署到目标 DB2 服务器上的程序集列表中。
您可以使用 DB2 数据库项目上的 Assemblies 菜单动作,管理要部署到服务器上的 CLR 程序集列表。您可以添加、删除以及选择要部署的程序集的调试和发布版本。
一旦部署,CLR 过程的行为就与任何其他语言存储过程一样,并可用作应用程序的一部分。
SQL 调试器
集成的跨语言 Visual Studio 调试器已经扩展为支持后端的 DB2 SQL 调试。现在,在执行数据库服务器例程时,您可以进行内嵌的 SQL 存储过程调用,设置行断点和变量值修改断点,以及修改变量值。
初始的调试支持构建到了 DB2 数据库项目中,您可以在其中指定将在调试模式下执行的启动存储过程。该支持限于 DB2 for Linux, UNIX, and Windows 服务器。
随着时光飞逝,调试支持得到了更大的关注,其中平台支持将扩展为包含 z/OS 和 iSeries。此外,从 Server Explorer 直接启动调试器,或将之作为全面展开的应用程序调试会话中的一部分也正在调查研究中。
在线帮助和用户选项
DB2 AD Tools for Visual Studio 支持一组丰富的用户定制选项。其中一些选项是直接从 IBM Tools 文件夹下标准 Visual Studio Tools->Options 菜单中打开的。附加的选项可以直接使用 %APPDATA%IBMDB2vsnetuserOptions.xml 文件访问。
当您注册 DB2 AD 工具和托管提供程序时,为工具和托管提供程序提供的在线帮助将自动注册 Visual Studio 内建帮助工具。您可以访问动态和基于内容的帮助。附加的在线帮助还可以通过 DB2 Information Center 找到,而 DB2 Information Center 则可以从 DB2 Tools 工具栏启动。