我们正在使用Informix数据库,并使用ODBC成功连接到.NET。我们使用的连接字符串是;
DRIVER={IBM INFORMIX ODBC RIVER};
UID=username; PWD=password;
DATABASE=our_database;
HOST=devsrv01;
SERVER=devsrv01_tcp;
SERVICE=ids9tcp2;
PROTOCOL=onsoctcp;
CLIENT_LOCALE=en_US.CP1252;
DB_LOCALE=en_US.819;
我们希望从ODBC更改并将IBM的SDK和库用作outlined on their site。
我们使用的代码是;
string ConnectionString = "Database=our_database; Server=172.22.0.0:1528; UID=username; Password=password; ";
try
{
IfxConnection conn = new IfxConnection(ConnectionString);
conn.Open();
}
catch (IfxException ex)
{}
conn.Open()抛出异常;
ERROR [08] [IBM] SQL30081N检测到通信错误。使用的通信协议:“TCP / IP”。正在使用的通信API:“SOCKETS”。检测到错误的位置:“172.22.0.0”。检测错误的通信功能:“recv”。协议特定的错误代码:“”,“”,“0”。 SQLSTATE = 08001
“啊哈!”你说。只需输入“PROTOCOL=onsoctcp;
”但这会使IfxConnection(ConnectionString);
命令抛出ArgumentException
。如果连接字符串包含任何无效的<field>=<value>
设置,则会抛出此异常。如果我放垃圾=垃圾;在它抛出相同的ArgumentException,这使我认为它不能识别协议(或PRO)字段。
(FYI)172.22.0.0是devsrv01的IP,不以0.0结尾。
答案 0 :(得分:3)
我最终发现答案是要包括;
Persist Security Info=True;Authentication=Server;
不要问我为什么。我只是让它发挥作用。
每个人+1 - 感谢您的帮助。
答案 1 :(得分:1)
您检查过http://www.connectionstrings.com/了吗?它可能会提供一些见解。
答案 2 :(得分:1)
IBM Informix .NET Povider Guide 4.10手册使用Protocol或PRO而不是PROTOCOL。关键字是否区分大小写?符号表明它可能是,但我不太了解.NET确定。使用PROTOCOL时出现的错误表明它可能区分大小写。
答案 3 :(得分:1)
假设您要使用.NET,Informix CSDK(而不是DRDA)和ADO.NET最简单的连接方式是使用将数据库添加到Visual Studio的数据连接列表中(View - &gt; Server) Explorer,然后单击“连接到数据库”按钮,然后只需填写表单(这假定您使用CSDK安装了Visual Studio Extensions ...)。
然后进入项目的属性,转到设置选项卡,添加一个类型为'(连接字符串)'的新设置,并输入值:
Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"
所以在app.config中它看起来像这样:
<add name="MyApplication.Properties.Settings.MyConnectionString"
connectionString="Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser"
providerName="IBM.Data.Informix" />
还要确保已在hosts文件(C:\ Windows \ System32 \ drivers \ etc \ hosts)和/或“开始”菜单中的Informix数据库连接工具“inetd32.exe”中配置了数据库和服务器某处...
此外,如果你有这种感觉,你可以将表等从服务器资源管理器窗口中的数据库拖到Visual Studio中打开的XSD文件上,让它自动将连接字符串添加到配置中并设置所有内容以便输入数据集,它将为你处理CRUD层...(虽然你可能会得到一堆错误,因为VS由于某些原因无法使用最新的驱动程序来拉动Informix架构......)
无论如何,您可以使用连接字符串,如:
IfxConnection myconnection = new IfxConnection(MyApplication.Properties.Settings.Default.MyConnectionString);