2009-03-04 91 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