.net 连接DB2数据库 ,采用sqlserver 2000的链接服务解决方案总结

绪论

现在手上有一个项目,是要为陕西联通开发一个内部综合信息平台;整合平台的功能并不复杂,但是本系统牵扯到了系统整合,用户同步和单点登录认证。内部平台需要和门户系统的数据进行同步,以便实现用户单点登录和统一认证。门户的系统用的是IBM的产品架设的,服务器是Linux操作系统, 数据库是DB2 8.2,平台开发语言是Java、JSP。综合信息平台服务器是Microsoft server 2003 操作系统,数据库是Microsoft Sqlserver2000 ,开发语言是C#、asp.net。

工作一:要完成C#ASP.net)连接到远程

步骤一:安装DB2运行时客户端

Db2数据库一般人不用,了解的人自然很少。C#连接到db2 数据库 需要装客户端吗?刚开始我也不知道是不是需要装客户端,我当然不愿意装它,在试验了好多方法以后我都没有连接成功!因此我开始考虑装客户端,我发现db2有一种叫做运行时的客户端,文件也不大,安装很方便,于是我就在我的服务器上安装了db2的运行时客户端。

步骤二:建立数据源。

在服务器上》开始》管理工具》建立数据源。

.net 连接DB2数据库 ,采用sqlserver 2000的链接服务解决方案总结

点击链接服务器中的表,可以查看表的名字,但是你还不能看见表的结构和内容,想查看表的内容需要用查询分析器来操作,编写sql语句来操作数据库。但好处是你可以在Microsoft sql server 2000 下面完成对db2数据库的操作。这样感觉是不是有点神奇呢,其实道理很简单,一想你就明白了。这也许就是连接服务器存在的意义吧。

下面写一个语句试验一下连接服务器。

.net 连接DB2数据库 ,采用sqlserver 2000的链接服务解决方案总结

结束

下面贴出我写的一个为了完成用户数据同步的存储过程,供大家参考一下,你可以根据你的需要编写你自己的存储过程,也可以将其添加成数据库作业定时调度

create PROCEDURE UpdateDB2Users AS --定义游标变量 Declare myCursor cursor For select [ID],changetype,changetime from OPENQUERY (db2 ,'select * from db2inst1.userinfo') where changetime>(select max(changetime) as locallast from userinfo) open myCursor --定义变量 declare @ID int declare @changetype varchar(50) declare @changetime varchar(50) --循环记录集 Fetch next From myCursor into @ID,@changetype,@changetime While @@FETCH_STATUS =0 begin --处理单条记录 IF (ltrim(rtrim(@changetype))='add' ) BEGIN If EXISTS(select [id] from userinfo where [id][email protected]) begin delete from userinfo where [id][email protected] --SET IDENTITY_INSERT WebData.dbo.USERINFO ON insert into userinfo select * from OPENQUERY (db2 ,'select * from db2inst1.userinfo') where [ID][email protected] end else begin insert into userinfo select * from OPENQUERY (db2 ,'select * from db2inst1.userinfo') where [ID][email protected] --更新到user表 insert into users(USERNAME,mobile,upassword,chinaname,uid,CuCompanyNumber,DepartmentNumber,comefrom,usertype)select rtrim(UID),rtrim(mobile),rtrim(UID),rtrim(cn),rtrim(UID),rtrim(CuCompanyNumber),rtrim(DepartmentNumber),1,7 from userinfo where [ID][email protected] end END ELSE IF(ltrim(rtrim(@changetype))='modify') begin delete from userinfo where [id][email protected] --SET IDENTITY_INSERT WebData.dbo.USERINFO ON insert into userinfo select * from OPENQUERY (db2 ,'select * from db2inst1.userinfo') where [ID][email protected] end Fetch next From myCursor into @ID,@changetype,@changetime end Close myCursor Deallocate myCursor

.net 连接DB2数据库 ,采用sqlserver 2000的链接服务解决方案总结

如果你没有安装运行时客户端或者客户端是找不到IBM DB2 ODBC DRIVER 的。

说明:到这一步 你就可以用ODBC数据源来连接db2数据库了。当让你也可以用db2的命令行来连接数据库。.net 连接DB2数据库 ,采用sqlserver 2000的链接服务解决方案总结

using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.Odbc; using System.Runtime.InteropServices; public partial class DB2Conn : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.Write("hello"); #region 连接测试 //string odbc = "Dsn=DB2;uid=appuser;mode=SHARE;dbalias=TDIDB;pwd=password"; OdbcConnection c = new OdbcConnection(odbc); c.Open(); string sqlx = "select * from db2inst1.userinfo FETCH FIRST 10 ROWS ONLY"; string sqlx1 = "describe table db2inst1.userinfo"; OdbcCommand cmd = new OdbcCommand(sqlx1, c); OdbcDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Response.Write(dr[0].ToString() + "<br/>"); } dr.Close(); dr.Dispose(); #endregion } }

步骤三:为了开发方便你可以选做步骤三

DB2数据库添加链接服务。什么是连接服务器。这个你上网搜索一下就知道了,其实都是很简单的东西。我是在Microsoft SqlServer2000 中建立的链接服务。做这一步的前提是你必须完成前面两个步骤

也可以用C#代码来连接数据库。代码参考如下