.Net开发采用DB2 XML的应用程序示例
一个存储库,例如关系数据库,可以为授权用户安全地共享 XML 文档和 XML 模式提供一个环境。授权用户可以在任何时候、任何地方安全地访问重要的 XML 文档和 XML 模式。通过使用可包含一个或多个关系数据库系统的存储库系统,用户可以找到并检索最新版本的 XML 文档和 XML 模式文档。DB2® 9 为 XML 提供了新的支持,对于这种新支持,.Net 应用程序开发人员可以很快地上手。这是因为 DB2 9 让程序员可以像对待关系数据那样查询、插入、更新和删除 XML 数据 —— 使用熟悉的 ADO .Net 语句和标准的查询语言。本文展示一些关于如何使用 .Net 构建采用 DB2 XML 技术的应用程序的详细示例。DB2 XML 技术允许以 XML 原有的分层格式来存储、验证和查询 XML。
DB2 中的 XML 支持
DB2 9 为管理、存储和查询 XML 数据引入了一些新的特性和机制:
- XML 数据类型使 DB2 可以以 XML 本身的分层格式来存储 XML 文档。
- XML 查询语言支持基于业界标准,并包括新的对 SQL 的 XML 扩展(也称 SQL/XML)。
- 支持基于用户提供的模式验证 XML 数据,这使得应用程序开发人员和数据库管理员可以对 DB2 中存储的 XML 数据实施数据完整性约束。本文中的例子使用 DB2 Visual Studio 2005 Add-in。
本文中的代码示例引用了 CARPOOL 表,该表记录旧金山和圣何塞两地关于合伙用车的信息。清单 1 展示了该表的定义。另外,还需确保数据库启用了 XML。
环境设置
注意:应确保 SAMPLE 数据库在创建时启用了 XML(见后面的定义)。
本文需要使用 Visual Studio .NET 2005 和 DB2 9。这两个产品的安装很简单。建议先安装 Visual Studio .NET,然后再安装 DB2 9。请记住在安装 DB2 时所输入的用户 ID 和密码,因为在连接 DB2 时要使用它们。
在 DB2 安装期间,应确保启用了 TCP/IP。如果在安装 DB2 之后不确定 TCP/IP 是否被启用,可以执行以下步骤进行检查:
- 从 Windows Start 菜单中,选择 Programs > IBM DB2 > DB2(默认)[或者为 DB2 实例名称] > Command Line Tools > Command Window。
- 在 DB2 命令窗口中,应该可以看到命令提示符 C:\Program Files\IBM\SQLLIB\BIN>(如果使用默认安装路径的话)。输入 db2set。在返回的结果中,应该可以看到这一行: DB2COMM=tcpip。
如果还没有为 DB2 启用 TCP/IP,那么可以输入以下命令来启用 TCP/IP:
- db2set db2comm=tcpip
- db2 update dbm cfg using svcename 50000
- db2stop
- db2start
安装了 DB2 之后,可以选择创建 DB2 SAMPLE 数据库。如果选择这么做,那么应接受默认设置,但务必选择 XML and SQL objects and data 选项。
为了检查系统设置是否成功,启动 Visual Studio .NET 2005。在 Visual Studio .NET 中,选择 File > New > Project。在 New Project 对话框中,在左侧面板中应该可以看到 IBM Projects。关闭该对话框。在 Server Explorer 中,连接到 DB2 SAMPLE 数据库(具体步骤请参阅 “Develop proof-of-concept .NET applications, Part 1: Create database objects in DB2 Viper using .NET”(developerWorks,2006 年 5 月))。确认在 Server Explorer 中可以看到 XML Schema Repository 树节点。如果没有看到,那么可能需要重新创建 SAMPLE 数据库,以启用 XML 特性。
清单 1. CARPOOL 表定义
CREATE TABLE CARPOOL ( ID INTEGER NOT NULL, FIRSTNAME VARCHAR ( 256 ) , LASTNAME VARCHAR ( 256 ) , TITLE VARCHAR ( 15 ) , PHONE VARCHAR ( 20 ) , CARPOOLINFO XML , CONSTRAINT CARPOOL_PK PRIMARY KEY (ID)) |
这里有两个 XML 模式,CarpoolInfo.xsd 和 USAddressType.xsd,其中 CarpoolInfo.xsd 引用了 USAddressType。
清单 2. 用于验证 CARPOOL 表中的 XML 文档的 XML 模式(CarpoolInfo.xsd)
<?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:include id="USAddress.xsd" schemaLocation="USAddress.xsd" /> <xs:element name="CARPOOLINFO"> <xs:complexType> <xs:sequence> <xs:element name="StartTime" type="xs:string" /> <xs:element name="Address" type="USAddress" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
清单 3. CarpoolInfo 依赖的 XML 模式(USAddress.xsd)
<?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="USAddress"> <xs:sequence> <xs:element name="Add1" type="xs:string"> </xs:element> <xs:element name="Add2" type="xs:string"> </xs:element> <xs:element name="City" type="xs:string"> </xs:element> <xs:element name="State" type="xs:string"> </xs:element> <xs:element name="Zip" type="xs:string"> </xs:element> </xs:sequence> </xs:complexType> </xs:schema> |
CARPOOL 表既包含基于 SQL 数据类型的列,又包含一个基于新的 DB2 XML 数据类型的列。后一个列,即 CARPOOLINFO,存储包括合伙用车者的地址和开始时间等信息的 XML 文档。图 1 展示了示例 carpoolnfo XML 文档。
图 1. 存储在 CARPOOL 表中的示例 XML 文档
现在来看看如何插入、更新和验证 CARPOOLINFO 列中的 XML 文档。清单 2 展示了一个 XML 模式,在将一个 XML 文档插入 CARPOOLINFO 列之前,需要使用这个 XML 模式对该 XML 文档进行验证。
为了编译和运行 .Net 应用程序,需要创建一个新的 Visual Studio .Net 项目。如果之前没有使用过 Visual Studio .Net,那么可以看看下面关于如何完成这些任务的概述:
- 启动 Visual Studio 2005。
- 创建一个新项目。选择 File > New > Project。选择 Visual C# > Windows Application。
- 创建对 DB2 .Net 数据提供程序 IBM.Data.DB2 的引用。在 Visual Studio .Net 项目管理器中,右键单击 References 节点,选择 Add Reference。选择 Browse 选项卡,找到 IBM.Data.DB2.dll,该文件位于 DB2 安装目录中,路径为 \SQLLIB\BIN\netf20\IBM.Data.DB2.dll。
连接数据库
首先需要建立到目标数据库的一个连接。清单 4 是用于建立 DB2 数据库连接的一个方法的片段。
清单 4. 建立 DB2 数据库连接
private DB2Connection m_conn = null; m_conn = new DB2Connection("database=sample"); m_conn.Open(); |
注册 XML 模式
DB2 9 允许用户注册 XML 模式,并在插入输入文档之前,根据这些模式对输入文档进行验证。XML 模式是 World Wide Web Consortium(W3C)业界标准的一部分。用户可以通过 XML 模式指定 XML 文档应遵从的结构,例如可接受的 XML 元素的顺序和数据类型,以及特定 XML 名称空间的使用。 DB2 Visual Studio 2005 Add-in 工具提供了一种使用简单的注册设计器来注册 XML 模式的简单方法,不过本文将展示如何使用 .Net 代码注册 XML 模式。一旦在 DB2 XML 模式库中注册了一个 XML 模式,便可以用该模式来验证 XML 文档。清单 5 展示了使用 .Net 代码注册 XML 模式的一种方法。
清单 5. 注册 XML 模式
//We have two xsds, CarpoolInfo.xsd and USAddress.xsd, //where CarpoolInfo.xsd is dependent on USAddress.xsd. //This XML Schema is identified as schema.xsdname. String[] xsdFiles = new String[2] { "CarpoolInfo.xsd", "USAddress.xsd" }; String[] schemaLocs = new String[2] { "http://tempuri.org/CarpoolInfo.xsd", "USAddress.xsd" }; // Register XML schema using DB2 .Net provider connection’s // RegisterXmlSchema API m_conn.RegisterXmlSchema(schema, xsdname, schemaLocs, xsdFiles, null, null, false); |