2009-03-04 36 views
2

我们使用Informix数据库,并使用ODBC成功地从.NET连接到它。我们正在使用的连接字符串是;Informix for .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 [08001] [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。

回答

3

我eventaully发现,答案是包括;

Persist Security Info=True;Authentication=Server; 

不要问我为什么。我只是让它工作。

+1对大家 - 感谢您的帮助。

1

IBM Informix .NET Povider Guide 4.10手册使用协议或PRO,而不是协议。关键字是否区分大小写?这个符号表明它可能是,但我对.NET的确信知之甚少。当你使用PROTOCOL时出现的错误表明它可能区分大小写。

+0

感谢您的想法。明天会尝试。如果可行,请听取大喊。 – 2009-03-04 21:39:52

1

假设您要使用.NET,Informix CSDK(而不是DRDA one)和ADO.NET,最简单的方法是使用将数据库添加到Visual Studio的数据连接列表(查看 - >服务器资源管理器,然后点击“连接到数据库”按钮,然后填写表单(这里假设你安装了带有CSDK的Visual Studio扩展......))。

然后进入项目的属性,进入设置选项卡上,添加新设置与类型“(连接字符串)”和把值:在App.config

Database=mydatabase;Password=mypassword;Server=myserver;User ID=myuser" 

所以它会是这个样子:

<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 \主机)和/或与Informix数据库的连接位于开始菜单某处的工具'inetd32.exe'...

此外,如果你因此会倾向于你可以拖动表格和这样从服务器资源管理器窗口中的数据库到Visual Studio中打开XSD文件有它程序自动连接字符串添加到配置和设置的一切给你一个类型化数据集,它会为你处理CRUD层...(尽管你可能会遇到一堆错误,因为由于某些原因,VS无法使用最新的驱动程序来拉动Informix模式...)

无论如何,你可以再使用的连接字符串,如:

IfxConnection myconnection = new IfxConnection(MyApplication.Properties.Settings.Default.MyConnectionString); 
+0

好主意。到目前为止,我得到了这个WTF; http://www.ianquigley.com/A9_Create_a_new_IBM_database.html – 2009-03-05 09:27:07