中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> IBM专区 > DB2 > .NET technology
Microsoft SQL Server 移植到 IBM DB2 UDB
作者:佚名 时间:2005-09-07 11:52 出处:互连网 责编:小渔
              摘要:使用 Borland C#Builder 将应用程序从 Microsoft SQL Server 移植到 IBM DB2 UDB
Jeremy McGee

2003 年 12 月
本文概述了在将一个用 C# for MicrosoftҖ Visual Studio .NET 和 Microsoft SQL Server 编写的应用程序改为使用 Borland C#Builder 和 IBM DB2 Universal Database(DB2 UDB)的应用程序时需要做的一些事情。本文使用了 Microsoft IBuySpy 示例应用程序,这是 www.asp.net 提供的一个免费示例 C# 系统。这个 ASP.NET 应用程序展示了在将一个中等大小的系统移植到 DB2 UDB 和 C#Builder 时所需遵循的步骤。

简介
本文概述了将一个用 C# 编写的针对 Microsoft® Visual Studio .NET 和 Microsoft SQL Server 的应用程序改为使用 Borland® C#Builder TM 和 IBM® DB2® Universal Database TM (DB2 UDB)的应用程序时需要做的一些事情。我将使用 Microsoft IBuySpy 示例应用程序,这是 www.asp.net 提供的一个免费示例 C# 系统。这个 ASP.NET 应用程序展示了将一个中等大小的系统移植到 DB2 UDB 和 C#Builder 所需遵循的基本步骤。

本文以 转换 IBuySpy 以使用 IBM DB2 UDB V8.1 为基础,这是关于使用 Microsoft Visual Studio .NET 的一个教程。我们已经更新了这个教程,在教程中使用了最新版本的 IBuySpy,并且还给出了如何使得这个程序变为使用 C#Builder 和 Borland Data Provider 的细节。

IBuySpy 本身是一个关于如何使用 C# 编写一个中等大小的数据库应用程序的例子。它使用了存储过程,并且清晰地将用户界面逻辑与业务逻辑分离开来。

需要些什么?
您将需要从 www.asp.net 获得 IBuySpy 应用程序的一个副本。还需要 转换 IBuySpy 以使用 IBM DB2 UDB V8.1 的一个副本。

当然,您还将需要一个 DB2 UDB (Personal Developer's Edition 包括应用程序开发客户机,后者包括 .NET Framework 库)以及 DB2 Migration Toolkit。为了编辑和运行这个应用程序,还需要 Borland C#Builder Enterprise。

要做些什么?

  1. 第一步是创建 IBuySpy 数据库。IBuySpy 要使用存储过程,因此 DB2 Migration Toolkit 将帮助我们将这些存储过程从 SQL Server 转变到 DB2 UDB。
  2. 第二步是将这个 C# 应用程序改为使用 Borland Data Provider。

将脚本从 SQL Server 移植到 DB2 UDB
下载了 IBuySpy 之后,运行安装程序。这将拆开打包的源代码,并试着建立一个 SQL Server 数据库(见 图 1)。如果您安装了 SQL Server 或者 MSDE,那么就可以完成安装程序,并且看到该应用程序如预期的那样工作——否则,这个时候安装过程就会中止。

图 1. 安装 IBuySpy 的最后一步是配置一个 SQL Server 数据库。 本文将讨论如何手动地创建一个 DB2 UDB 数据库。
Figure 1. The final step when installing IBuySpy is to configure a SQL Server database. This article discusses how to manually create a DB2 database.

接下来,使用 DB2 Control Center,创建一个名为 STORE 的数据库,使用 English-language 默认选项(见 图 2)。要做到这一点,打开 Control Center,展开代表 DB2 UDB 主机的节点,选择适当的实例,然后右键点击 Databases节点并选择 Create >Database Using Wizard。(如果您愿意,也可以从一个 DB2 命令窗口输入 db2 create database store using codeset UTF-8 territory US 。)

图 2. 使用 DB2 Control Center 创建一个新的数据库
Figure 2. Use the DB2  Control Center to create a new database

SQL Server 和 DB2 UDB 都使用 SQL,但是在使用时又各有不同的特色,尤其是在存储过程方面。IBuySpy 应用程序是使用 StoreDB.sql 脚本创建 SQL Server 数据库的,因此您将需要转变这个脚本。

DB2 Migration Toolkit 使得这种转变轻而易举,但是需要遵循一些特别的步骤以确保 DB2 Migration Toolkit 正确地执行了转变。脚本包括一些额外的命令,用于创建数据库和安排您需要删除的一些定时作业。

在 C#Builder 中,要做到这些,应首先从 IBuySpy 应用程序源代码树打开文件 StoreDB.sql ,将它保存为一个新文件,即 StoreDB2.sql 。接着删除原先的整个 CONFIG 段,从顶部一直到 MAKE TABLES AND SPROCS 注释。再接着,在该文件的底部,删除最后一段,从  ADD SCHEDULED JOBS 注释一直到文件的结尾。这样就应该只剩下 Load Data 这一段了。

您还需要修改脚本中的几个大小写问题,因为 Migration Toolkit 是大小写敏感的,因此在这里要从头至尾进行如下替换:

  • EmailAddress替换 EMailAddress 
  • CartID替换 CartId
  • OrderDetails替换 orderdetails
  • UnitCost 替换 Unitcost 
  • Quantity 替换 quantity 

载入 Migration Toolkit,创建一个新项目,然后将 SQL Server 脚本 StoreDB2.sql 移植到 DB2 UDB 数据库:

  1. 导入 StoreDB2.sql 作为 SQL 文件。
  2. 选择 Convert标签,接受默认选项,然后点击 Convert
  3. 如果存在任何较大的问题,就会显示出 Refine 标签页。检查错误,调查是否存在问题。如果存在问题,那么应更正脚本。
  4. 当看到脚本运行正常时,选择 Generate Data Transfer Scripts 标签并点击 Generate Scripts
  5. Deploy 标签页上,输入正确的登录信息,以便登录到数据库,然后点击 Deploy(见图 3)。

图 3. 在将脚本移植到 DB2 UDB 数据库时 Migration Toolkit 的最后状态
Figure 3. The final stage of the Migration Toolkit is deployment to a DB2 database

在这一过程的最后,您将完成 StoreDB2.DB2 脚本的创建,同时也在 DB2 UDB 数据库中创建了 IBuySpy 数据的一个版本。这个脚本包括了 SQL Server 命令,这些命令对应于转换后在 DB2 UDB 中等同的 SQL 命令。如果编辑这个文件,您将看到语法会有所不同,但是最后的结果是一样的。(如果您习惯于 SQL Server 开发,那么这是查看在 DB2 中等同的 SQL 命令的最好方式。)

接下来的一步是转变 IBuySpy 应用程序本身,使其使用 DB2 UDB,而不是使用 SQL Server。不过,首先还是让我们回顾一下 .NET 数据库组件是如何工作的,并看看 DB2 UDB 如何适应 ADO.NET。

.NET 数据库开发的背景知识
ADO.NET (或者更恰当地说,是在 System.Data 中实现的一些类)并不关心获取数据时所使用的提供者(provider)是什么,只要这些提供者实现了适当的接口,能够用 DataSet DataReader 组件填充数据库表就行了。例如,IBuySpy 使用 System.Data.SqlClient 类来直接与 SQL Server 打交道。

对于 DB2 UDB 下的 System.Data.SqlClient ,IBM 有一个等同的受管提供者。 IBM.Data.DB2 管理的提供者包含了一些类,这些类与它们在 SQL Server 中的等同物( System.Data.SqlClient 中的类)有着直接的 1 对 1 的对应关系,该提供者还提供了一些附加的属性,以获得 DB2 UDB 特有的一些特性。在 转换 IBuySpy 以使用 IBM DB2 UDB V8.1 中用到了这个受管提供者。该教程第 11 和 12 页中的步骤使用的是 C#Builder,它们工作起来与使用 Visual Studio .NET 时一样的好。

对于 C#Builder,Borland 创建了 Borland Data Provider。这提供了类似于 Microsoft 驱动程序的接口,但是并不局限于任何特定的后端数据库。从 SQL Server 管理的提供者转变到 Borland Data Provider 十分地简单和方便。

System.Data.SqlClient 只使用 SQL Server。虽然使用 System.Data.OleDb 中同等的一些类来与 DB2 UDB 打交道也是可能的,但是由于 OLE DB 需要使用一个 Windows 兼容层,这样就比本地管理的 Borland Data Provider 要慢些。

探索 Borland Data Provider
当您使用 Microsoft 提供者连接到 SQL Server 或 MSDE 时,要使用一个 SqlConnection 组件。在 Borland Data Provider 中使用的类似的组件是 BdpConnection。类似地, SqlDataAdapterBdpDataAdapter代替, SqlCommandBdpCommand代替, SqlParameterBdpParameter代替,依此类推。

这些组件并不完全相同,因为 Borland Data Provider 提供了一些附加的特性。例如,它包括在 Windows Forms 应用程序中在设计时查看存活的数据的能力。

在很多情况下,Borland Data Provider 可以从一个数据库系统切换到另一个数据库系统,而且根本不用修改源代码。我将向您展示,通过对配置文件作一点修改,确实可以要么在 SQL Server 环境下运行,要么在 DB2 UDB 环境下运行。

探索 Borland Data Provider 这些附加属性和方法的一种很好的方式就是创建一些用于测试的 Windows Forms 应用程序。参见 DB2 产品园地 Borland 区中的其他文章,以获得更多信息。

将 IBuySpy 更新为使用 Borland Data Provider
IBuySpy 中的所有数据库访问都是通过 5 个 C# 程序单元实现的。因此,我们可以更改这些程序单元,使它们使用 Borland Data Provider,这样访问数据库就很容易了。

将 IBuySpy 导入 C#Builder
在 C#Builder中,使用 File > Open Project导航到安装了 IBuySpy 源代码的目录下。您需要更改对话框底部的 Files of type选项,接着打开 Visual Studio 项目文件 StoreCSVS.csproj 。C#Builder 将导入这个文件,并将其转变为 Borland Developer Studio 中的等同物 StoreCSVS.bdsproj 。Project Manager 应该会显示 IBuySpy.dll 项目(见图 4)。

图 4. IBuySpy 应用程序可以直接导入 Borland C#Builder 中
Figure 4. The IBuySpy application can be imported directly into Borland C#Builder

不过,在进入下一步之前,还有两个细节需要讲一下。首先,您需要告诉 C#Builder 哪一个是应用程序的默认 Web 页面:具体的做法是,右键点击 Default.aspx 文件,选择 Set as Start Page

接下来,需要告诉 C#Builder 您想在调试的时候使用哪个 Web 服务器作为主机:具体的做法是,右键点击 IBuySpy.dll 文件名,选择 Options。在对话框左边的树视图中,选择 ASP.NET,并如图 5 所示设置选项。

图 5. 在 C#Builder 中为项目设置调试选项
Figure 5. Setting the debug options for the project in C#Builder

将程序单元更新为使用 Borland Data Provider
我们想要更新的单元在项目的 Components 文件夹中。例如,看一下 CustomersDB.cs 这个文件,这个文件包含了所有必需的业务逻辑,包括添加、查询和使客户通过 IBuySpy 系统的认证(见图 6)。

图 6. 数据访问是由 Components 目录中的 C# 单元处理的
Figure 6. The data access is handled from the C# units in the Components directory

因为数据访问集中在这 5 个单元中,即使对系统作大的更改也不会牵涉到应用程序其他部分的细节,因而这种更改非常容易。在这里您可以看到,用于数据访问的代码相当简单。

继续下去,更改这些组件,使它们使用 Borland Data Provider 等同物。首先,为项目添加一个对 Borland.Data.ProviderBorland.Data.Common 组合的引用,具体做法是在 Project Manager 中右键点击 References标签,并选择 Add Reference

接下来需要将 SQL Server 对象替换为它们的 Borland Data Provider 等同物。对于这 5 个文件中的每个文件:

CustomersDB.cs
OrdersDB.cs
ProductsDB.cs
ReviewsDB.cs
ShoppingCartDb.cs

进行如下替换,在编辑器中使用 Edit > Replace

  • BdpConnection替换 SqlConnection 
  • BdpCommand替换 SqlCommand
  • BdpDataAdapter替换 SqlDataAdapter 
  • BdpParameter替换 SqlParameter 
  • BdpDataReader替换 SqlDataReader 

还需要像下面这样更改类型,同样使用 Edit >Replace

  • BdpType.Int32替换 SqlDBType.Int
  • BdpType.String替换 SqlDBType.NVarChar 
  • BdpType.DateTime替换 SqlDBType.DateTime 
  • BdpType.Decimal替换 SqlDBType.Money 

然后,对于那些不返回结果集的存储过程,您需要设置其输出参数的精确度。在 IBuySpy 中,在 CustomersDB.csProductsDB.csShoppingCartDb.cs 源文件中都有这样的例子。IBuySpy 代码在每条 // Add Parameters to SPROC 注释的后面设置各个 BdpParameter 对象。其中设置了一个输出参数——换句话说,该参数的 Direction 属性被设为 ParameterDirection.OutputParameterDirection.Both—— Precision 属性也需要被设置。

对于字符串,将 Precision 属性设置为希望的最大长度。对于数字,将该属性设置为该字段的总长度。

例如,对 GetCustomerDetails方法的 FullName 参数的设置如下:

		BdpParameter parameterFullName
            = new BdpParameter("@FullName",
            BdpType.String, 50);
            parameterFullName.Direction =
            ParameterDirection.Output;
            parameterFullName.Precision = 50;
            myCommand.Parameters.Add(parameterFullName);
            

另外还需对每个返回一个结果集的存储过程进行小的修改。这里有必要将结果类型覆盖为一个 BdpDataReader。例如,在 OrdersDB 中, GetCustomerOrders 方法倒数第二行应该是这样的:

BdpDataReader result =
            (BdpDataReader)
            myCommand.ExecuteReader(CommandBehavior.CloseConnection);
            

ProductsDB.csReviewsDB.cs ShoppingCartDb.cs 中有更多这样的例子。

检查存储过程的参数次序
SQL Server 和 DB2 UDB 之间一个很大的不同是,对于 DB2,存储过程的参数次序是很重要的。在某些地方,存储过程的参数需要变换位置:

  • ProductsDB.cs 中的 GetProductDetails() 方法中,将参数的次序变换为: @ProductID, @ModelNumber, @ModelName, @ProductImage, @UnitCost, @Description。
  • ShoppingCartDB.cs 中,对于 AddItem()UpdateItem() 这两个方法,都将它们的参数次序更改为:@CartID, @ProductID, @Quantity。同样在这个单元中,将 RemoveItem() 方法的参数次序变换为:@CartID, @ProductID。

做完这些之后,就可以编译这个应用程序了。通过运行应用程序可以确信没有语法错误,并确信在搜索-替换操作中没有遗漏任何组件。

设置配置字符串和测试应用程序
运行应用程序之前要做的最后一步是更改 Web.config 文件中的连接字符串,因为 Borland Data Provider 所使用的语法与 SqlClient 所使用的语法有很大的不同。在第 5 行像下面这样替换 ConnectionString 属性的值:

assembly=Borland.Data.Db2,Version=1.1.0.0,Culture=neutral,
            PublicKeyToken=91d62ebb5b0d1b1b;
            vendorclient=db2cli.dll;database=STORE;provider=DB2;
            username=username;password=password

运行应用程序。过了一小段时间之后,Web 浏览器应该装载了起始页(见 图 7)。(您可能需要按下 Alt-Tab 键将这个页面调到前面来——C#Builder 需要连接到 ASP.NET 工作进程,这需要花费一些时间,如果是在一个比较忙的系统中,这一点会更明显。)试着添加一个新客户,并订购一些物品。

图 7. 经过移植的应用程序,现在用的是 DB2 UDB
Figure 7. The migrated application, using DB2

数据库之间的切换
现在您的应用程序使用的是 Borland Data Provider,您可以通过简单地更改 Web.config 中的 ConnectionString 在不同数据库之间来回切换。例如,要切换回 SQL Server,可以将 ConnectionString 更改为:

assembly=Borland.Data.Mssql,
            Version=1.1.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;
            vendorclient=sqloledb.dll;database=database;
            username=username;hostname=hostname;password=password;provider=MSSQL

经过编译后,应用程序应该就可以直接运行了。

结束语
本文讨论了将一个中等复杂的应用程序从 SQL Server 和特定于 Microsoft 的 SqlClient 提供者移植到 DB2 UDB 和 Borland Data Provider 时涉及的一些步骤。对于您自己的应用程序来说,移植的时候同样也是采取这些步骤。首先,移植服务器上的数据和应用程序对象,例如存储过程。做完这些之后,需要修改应用程序,用 Borland Data Provider 替换 SqlClient 提供者。

DB2 UDB 最大的优点之一就是 Migration Toolkit,它使得一个系统从 SQL Server 到 DB2 UDB 的移植非常简单,这一点前面我已经讲过。当结合使用 Borland Data Provider 和 C#Builder 时,您就可以编写高速的、数据库无关的应用程序。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有