.NET连接IMB DB2数据库的一些问题及最终完美解决方案!

其实本来不是很难的东西,只是网上的教程颇少,而且一些复杂容易误导人的教程总是容易被搜索,真正正确简单又通用的方法却被埋没.

先说说网上的常见的方法(都是大坑,不感兴趣的可以跳过直接往下面看).
1.使用 Microsoft  OLEDB Provider for DB2 来连接,此种方法是可以不用安装DB2客户端 .
但是必须需要安装合适的SQL server版本。 是的,你没看错,这里就是要对应的SQL server版本。
关于  Microsoft  OLEDB Provider for DB2,现在有2.0版本,4.0版本,5.0版本 各种版本,分别对应指定的SQL server版本. 
下图为微软官网的关于Microsoft  OLEDB Provider for DB2 3.0版本的说明.

.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第1张图片

这里有一个大坑是,同样是SQL server 2008R2 ,必须为 Enterprise 或者Developer 版本才可以安装得上.
如果同样是SQL server 2008R2,但是版本不对,是安装不了的.
  安装过程是,打开释放文件到一个目录下,然后打开释放目录下的setup.exe就行了.
 

 .NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第2张图片

安装错误是因为SQL版本问题。 
最后进行查询,果断放弃.因为是Express Edition.
.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第3张图片
 

再说说如果版本都符合的时候,连接的代码.(代码段直接上图贴的别人的)
.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第4张图片
基本上和其它数据库的连接操作方式雷同, 除了说这里的连接是 OleDbConnection ,执行命令是OleDbCommand ,等等.
反正很简单的代码,一看便知,不做详细叙述. 总之这东西安装有点坑,只要版本对应问题不解决,想要成功还真不太容易.

(更讨厌的是如果需要使用你的程序,对应电脑就必须安装个大大的SQL server怎么能受得了? 而且还是程序实际上不使用SQL server,使用的DB2的情况下)

2.第二个坑就是,通过使用IBM提供的IBM.data.DB2.DLL来连接.这个是很多人都会说的.
问题是你不知道去哪里找 IBM.data.DB2.DLL ,即便找到了,也可能存在32位或者64位的区别,以及库对应的.net 框架版本,然而这些都只是其次.
即便找到了正确的IBM.data.DB2.DLL文件,可能依旧发现还是连不了.
.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第5张图片
出现的错误,常见的有.
 (第1种)
 SQL1159  Initialization error with DB2 .NET Data Provider, reason code 2, tokens E:\TZXsys\DB2Conn\DB2Conn\bin\db2app.dll, , Process Owner: Administrator 
提示找不到 db2app.dll 这个文件,如果你试图去网上下载,这个也就难找了,而且依旧是有对应的.net版本的区别和x86 x64的区别(提供下载的站点往往没做版本标注),即便是找到了,下载到以后,依旧可能会出错的.比如这样:
 .NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第6张图片

(又会提示缺少另外一个文件,还要各种找找找个不停。ps:这个问题安装IBM客户端可以解决,稍后提)


然后另外一种说法开始流传出来了.

网络上经常看到有人问, C# 连接db2数据库,要装db2客户端吗?
使用 Microsoft  OLEDB Provider for DB2 可以不用安装DB2客户端 .
使用IBM提供的IBM.data.DB2.DLL ,需要安装DB2客户端(真正的正确答案其实是不必要的).  

去找IBM的 DB2客户端,的确可以解决上面这个缺少文件的问题,但是只会陷入更大的误区,因为资源站都下载不到啊,必须要去IBM上面经过复杂的注册过程和申请过程,才可以下载.下载下来以后,安装,然后还是无法使用的,
如果db2数据库在远程服务器,连接字符串中的数据库名、用户名、密码为db2编目到本地的数据库名、用户名、密码。
还需要设置本地编录啊什么的,对于不太熟悉DB2的人来说,可能需要花更多的时间理解和学习什么是本地编录,远程编录,反正只会让解决问题更加的复杂化.
其次连接字符串很难写对,跟平常写的string strConn = "server=服务器IP,Database=数据库名;UID=用户名;PWD=密码";是不一样的,直接报错如下.
  


3. 真正最简单的方法就是下载IBM Data Server .NET Provider程序 ,然后安装,之后引用对应版本的IBM.Data.DB2
.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第7张图片 
然后在项目中同样引用 using IBM.Data.DB2;
这样就可以了.
不要单独的在网上下载任何单独的IBM.Data.DB2 , 最好是直接下载一个IBM Data Server .NET Provider程序安装包.

(这个东西我会上传到CSDN,稍后贴上链接)。

下载地址:

https://download.csdn.net/download/chenhui389/10554947

http://t.cn/RgHPjPt
或者
http://dz.ci/eMNrYv


安装完成之后,如果是默认路径安装的,一般是在C:\Program Files\IBM\IBM DATA SERVER DRIVER\bin下面.
 .NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第8张图片
 里面有引用,
引用过去以后在测试连接,不会提示文件db2app.dll的错误,也不会有其它缺少文件的错误提示.
唯一需要注意的是连接字符串是否正确. 连接字符串究竟是什么格式,长啥样这些其实都是可以找的.
这也是安装IBM Data Server .NET Provider程序的好处,如果是直接引用网上下载的IBM.Data.DB2,我们操作添加连接是选不到适当的类型的.

.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第9张图片

添加一个新连接,这里可以选择IBM OLE DB Provider for DB2.  仔细点儿, 这里是IBM OLE DB Provider for DB2.而不是第一方法中的 Microsoft  OLEDB Provider for DB2.
.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第10张图片
然后我们切换到高级,可以得到一个字符串.
.NET连接IMB DB2数据库的一些问题及最终完美解决方案!_第11张图片
OLE DB的strConn:
Provider=IBMDADB2.IBMDBCL1;Data Source=数据库名;Persist Security Info=True;User ID=用户名;pwd=密码;Location=服务器IP地址
凡是申明了Provider 的,一般都是OLE DB处理程序.
如何连接和使用可以完全参照方法一.

            string strConn = 
"Provider=IBMDADB2.IBMDBCL1;Data Source=数据库名;Persist Security Info=True;User ID=用户名;pwd=密码;Location=服务器IP地址"; 

            using (OleDbConnection conn = new OleDbConnection(strConn))

            {

                OleDbCommand cmd = new OleDbCommand(strSql, conn);

                try

                {

                    conn.Open();
                    MessageBox.Show("连接成功");

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);

                }

            }

这里测试OleDbConnection 是连接成功了,

也说下其它的, IBM.Data.DB2.DB2Connection 这个类,

            string connStr2 = "Database=fsywydb;UserID=tzxdb;Password=*****;Server=***.***.***.***";

            string sqlStr = "select name from sysibm.systables where type='T' and tbspace='USERSPACE1'";

            using (DB2Connection conn = new DB2Connection(connStr2))
            {
                try
                {
                    conn.Open();
                    DB2DataAdapter dda = new DB2DataAdapter(sqlStr, conn);
                    dda.Fill(ds);
                }
                catch (Exception ex)
                {
                    //errorAdd(ex.Message);
                }
            }

 

DB2数据库连接的方式很多,

大致总结就是那么几大类, 

Microsoft  OLEDB  Provider for DB2: 使用OleDbConnection连接

"Provider=IBMDADB2;Data Source=数据库名;UID=用户名;PWD=密码;";

 IBM OLEDB  Provider for DB2  ,安装后包含可以使用2种方法: OleDbConnection  与 DB2Connection 皆可 .

OleDbConnection

"Provider=IBMDADB2.IBMDBCL1;Data Source=fsywydb;Persist Security Info=True;User ID=tzxdb;pwd=******;Location=*.*.*.*";

DB2Connection 

"Database=fsywydb;UserID=tzxdb;Password=******;Server=*.*.*.*";

IBM DB2 ODBC DRIVER: OdbcConnection

 "driver={IBM DB2 ODBC DRIVER};database=fsywydb;hostname=*.*.*.*;port=50000;protocol=TCPIP;uid=tzxdb;pwd=******;";

 

连接字符串就这几个,Provider 是对应OLEDB,使用location=ip , driver 是对应 ODBC 驱动,使用hostname=ip .

 

 

你可能感兴趣的:(绝对原创)