从 Microsoft .NET 连接到 DB2






4.67/5 (16投票s)
2003 年 8 月 29 日
4分钟阅读

465698
Microsoft .NET 和 Db2 连接
引言
大多数零售应用程序仍在遗留系统(如 AS/400、大型机等)中运行。 如果您计划将整个应用程序(或任何模块)迁移到 Microsoft .NET,则现有数据的迁移将成为瓶颈(因为可能存在 TB 级的数据、同步问题、数据类型不匹配等)。 因此,您的最终选择将是使用现有数据库。 让我们考虑不同的选项来连接驻留在 AS/400 系统中的 Microsoft .NET 和 DB2 数据库。
托管提供程序
托管提供程序在公共语言运行时的范围内工作。 没有 COM 互操作性,显然无需担心序列化和封送处理。 托管提供程序通过方法、属性和接口公开提供程序特定的行为,这比 OLEDB 提供程序更有效。 因此,最终结果将是更好的性能。 目前,SQL Server 和 Oracle 数据库(SqlClient 和 OracleClient)有成熟的托管提供程序。 我们仍在等待 System.Data.Db2Client
命名空间。 因此,当前选项是使用市场上提供的其他第三方托管提供程序。 其中一些仍在开发中。
IBM DB2 UDB 8.1.2
此版本为 DB2 提供了由 IBM 开发和支持的托管数据提供程序。 不需要第三方驱动程序或桥接解决方案。 Visual Studio .NET IDE 的一组附加组件简化了使用 ADO.NET API 的应用程序的创建。 这些附加组件还扩展了 Visual Studio .NET 的功能,以开发 DB2 服务器端对象,例如存储过程和用户定义函数。 使用 VS IDE 集成,我们将能够直观地探索各种 DB2 资源,类似于 SQL Server。 .NET 支持也随 DB2 Connect 8.1.2 一起提供,支持 DB2 UDB for z/OS 和 OS/390 V7。 以下是使用此提供程序的代码片段。
DB2Connection cn = new DB2Connection( "Database=TEST;UserID=db2admin; Password=password;Server=IS500"); DB2Command cmd = new DB2Command("SELECT COUNT(*) FROM EMP01", cn); int count = Convert.ToInt32(cmd.ExecuteScalar());
Microsoft Host Integration Server 2004
Host Integration Server 2004 的主要功能之一是遗留数据库的托管提供程序,其中显然包括 DB2 提供程序。 Beta 版本目前可用。 我们可以以编程方式调用遗留的客户信息控制系统 (CICS) 和信息管理系统 (IMS) 程序,这对于大型机事务处理至关重要。 但是,Visual Studio .NET IDE 集成不可用。
DataDirect Connect for .NET, 2.0 版
DataDirect 的 "DB2 Wire Protocol" 提供程序可以连接到 DB2 UDB for z/OS 和 OS/390 v7.1 以及 DB2 UDB for AS/400 V4R5、V5R1 和 V5R2。 目前这不支持分布式事务。
Mono.Data.DB2Client
Mono 项目也在创建 IBM DB2 数据提供程序。 它需要到 IBM DB2 共享库的调用级接口。 这就是 Windows 上的 db2cli.dll。 IBM DB2 CLI API 与 ODBC API 非常相似。 此提供程序功能不完整。 在 Windows 和 Linux 上编译。
非托管提供程序
如上图所述,我们还有两个选项可以连接到 DB2 数据库,即使用 ODBC 和 OLEDB 提供程序。 显然,将有一个额外的层和互操作性,这将绝对影响性能。 有不同的非托管提供程序可用。 让我们考虑其中的几个。
用于访问 iSeries 服务器上数据库的 OLE DB.NET 数据提供程序可以使用 iSeries OLE DB 提供程序。 要利用 .NET 支持,Windows 系统上需要 iSeries Access V5R2 和 ServicePack 2 或更高版本。 为了获得最大的稳定性,您还应该在 iSeries 服务器上安装最新的数据库组 PTF(V5R1 为 SF99501 或 V5R2 为 SF99502)。
OleDbConnection cn = new OleDbConnection( "Provider=IBMDA400.1;Data Source=TEST;User ID=db2user;" + "Password=db2user;Default Collection =SAMPLEDB");
同样,如果我们使用 ODBC 驱动程序,那么我们必须在连接字符串中设置 DSN 名称。 具体来说,DSN 属性用于指向目标 iSeries 数据源。 DSN 必须事先使用 ODBC 管理实用程序注册。
OdbcConnection cn = new OdbcConnection( "DSN=TestODBC; UID=db2user; PWD=db2user;DBQ=SAMPLEDB");
如果您使用 Microsoft OLEDB 提供程序,则连接字符串如下所示。
TCP/IP
"Provider=DB2OLEDB;Network Transport Library=TCPIP;Network Address=XXX.XXX.XXX.XXX;Initial Catalog=MyCtlg;Package Collection =MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW"
APPC
"Provider=DB2OLEDB;APPC Local LU Alias=MyAlias;APPC Remote LU Alias =MyRemote;Initial Catalog=MyCtlg;Package Collection=MyPkgCol;Default Schema=Schema;UserID=MyUser;Password=MyPW"
结论
最终的选择取决于许多因素(供应商的支持、成本、可扩展性、稳定性等)。 希望您可以通过牢记性能来做出正确的选择。 :)