其实本来不是很难的东西,只是网上的教程颇少,而且一些复杂容易误导人的教程总是容易被搜索,真正正确简单又通用的方法却被埋没.
先说说网上的常见的方法(都是大坑,不感兴趣的可以跳过直接往下面看).
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版本的说明.
这里有一个大坑是,同样是SQL server 2008R2 ,必须为 Enterprise 或者Developer 版本才可以安装得上.
如果同样是SQL server 2008R2,但是版本不对,是安装不了的.
安装过程是,打开释放文件到一个目录下,然后打开释放目录下的setup.exe就行了.
安装错误是因为SQL版本问题。
最后进行查询,果断放弃.因为是Express Edition.
再说说如果版本都符合的时候,连接的代码.(代码段直接上图贴的别人的)
基本上和其它数据库的连接操作方式雷同, 除了说这里的连接是 OleDbConnection ,执行命令是OleDbCommand ,等等.
反正很简单的代码,一看便知,不做详细叙述. 总之这东西安装有点坑,只要版本对应问题不解决,想要成功还真不太容易.
(更讨厌的是如果需要使用你的程序,对应电脑就必须安装个大大的SQL server怎么能受得了? 而且还是程序实际上不使用SQL server,使用的DB2的情况下)
2.第二个坑就是,通过使用IBM提供的IBM.data.DB2.DLL来连接.这个是很多人都会说的.
问题是你不知道去哪里找 IBM.data.DB2.DLL ,即便找到了,也可能存在32位或者64位的区别,以及库对应的.net 框架版本,然而这些都只是其次.
即便找到了正确的IBM.data.DB2.DLL文件,可能依旧发现还是连不了.
出现的错误,常见的有.
(第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的区别(提供下载的站点往往没做版本标注),即便是找到了,下载到以后,依旧可能会出错的.比如这样:
(又会提示缺少另外一个文件,还要各种找找找个不停。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
然后在项目中同样引用 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下面.
里面有引用,
引用过去以后在测试连接,不会提示文件db2app.dll的错误,也不会有其它缺少文件的错误提示.
唯一需要注意的是连接字符串是否正确. 连接字符串究竟是什么格式,长啥样这些其实都是可以找的.
这也是安装IBM Data Server .NET Provider程序的好处,如果是直接引用网上下载的IBM.Data.DB2,我们操作添加连接是选不到适当的类型的.
添加一个新连接,这里可以选择IBM OLE DB Provider for DB2. 仔细点儿, 这里是IBM OLE DB Provider for DB2.而不是第一方法中的 Microsoft OLEDB Provider for DB2.
然后我们切换到高级,可以得到一个字符串.
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 .