[安裝/ASP.net MVC] 在Windows 7 (64位元)或Windows Server上使用IBM Informix .Net Provider及ODBC存取Informix資料庫

[安裝/ASP.net MVC] 在Windows 7 (64位元)或Windows Server上使用IBM Informix .Net Provider及ODBC存取Informix資料庫

2019.4.3追記:

由於Windows Server 2008 R2快要退休,最近公司有需求要把程式移機到Windows Server 2016重新部署

這段時間剛好看到網路文章:

Connect to Informix with ADO.NETConnecting to Informix database from .NetConnecting to Informix using .NET

加上IBM Informix Client SDK安裝期間,我瞄到 IBM Informix.Net Provider的關鍵字,好奇之下到安裝目錄找找有沒有什麼.dll可用,畢竟使用ODBC介接資料庫我覺得效能不夠好

最後試出來如下

1.到C:\Program Files\IBM Informix Connect\bin\netf20 把以下兩個.ddl複製到自己專案

2. IBM.Data.Informix.dll加入Visual Studio專案參考

3. IfxDotNetIntrinsicModule.dll 右鍵屬性>一律複製,此.dll建置出來的位置要和IBM.Data.Informix.dll相同目錄(通常為bin資料夾),程式執行才找得到.dll

4.App.config或Web.config 配置連線字串,以下是範例

 <connectionStrings>
    
 <add name="dbConn" connectionString="host=10.1.127.11;server=serverName;service=8889;protocol=onsoctcp;database=dbName;uid=accountName;pwd=密碼;client_locale=zh_tw.utf8;db_locale=zh_tw.utf8;"/>
 
 </connectionStrings>

5. 到我另一篇文章 分享自己存取資料庫使用的SqlHelper類別,ADO.net技術 參考ADO.net的程式碼

只要修改兩行即可存取Informix資料庫

雖然官網(.NET Provider 之間的差異)建議使用最新的 IBM.Data.DB2.dll,但官網我找不到載點,Visual Studio透過Nuget套件安裝建置會有架構不符的警告

於是我放棄此項選擇Orz,改天有空再研究

[C#][DB2]DB2資料轉型

 

====以下是2019.4.3以前的內容====

前言

最近公司案子需求,要用.net程式存取Informix資料庫,試來試去ODBC有連成功過

分享一下

實作

1. 要在Windows 7 64位元作業系統上透過ODBC存取Informix資料庫的話,要先安裝32位元的Informix Client SDK

※不知為啥Console程式我測試可以透過64位元INFORMIX ODBC Driver存取Informix資料庫,ASP.net就得要透過32位元Informix ODBC Driver才能存取

※2014.07.01追記:感謝底下FrankWu網友留言提供解法,其實安裝64位元的Infomix Client SDK也是可以

 

可以到此頁:http://www14.software.ibm.com/webapp/download/search.jsp?rs=ifxdl

Informix Downloads (Informix Client SDK Developer Edition for Windows x86, 32-bit) 下載

※Informix資料庫有限定必須對應安裝的ODBC版本,哪種Informix資料庫裝什麼ODBC版本以上,這部份可以詢問公司經手過的前輩或到IBM網站找找資訊或聯絡IBM工程師…等等來確認。

 

由於要在64位元作業系統安裝32位元的Driver

要先做設定

2. 我的電腦>右鍵內容>進階系統設定>進階頁籤>環境變數>

下方的系統變數中找到Path,按下編輯

image

把「C:\Windows\SysWOW64;」貼在文字最前面( ;  是分隔符號的意思)

確定後

3.執行剛剛下載的Informix Client SDK 32 位元的安裝

基本上都是下一步>下一步,如果有要設定帳密,那個跟ODBC存取無關,自己隨便輸入就好

過程中,如果問你要不要安裝IBM Data Server Driver Package的話,可以順便裝一下(注意32位元和64位元的IBM Data Server Driver Package無法共存安裝,但不會影響ODBC的存取)

4.完成後,按下Windows鍵+R 執行「C:\Windows\SysWOW64\odbcad32.exe」

執行 32位元ODBC管理工具

※由於是Windows 7 (64位元),系統管理工具裡的ODBC管理工具預設是64位元版,要找上面那個路徑的程式看剛剛安裝的32位元ODBC Driver才找得到

 

確認驅動程式頁籤裡,有出現「IBM INFORMIX ODBC DRIVER」這個名稱有出現,因為待會連線字串會用到

image

5. 開始寫程式,測試開啟、關閉連線,都沒出現Exception的話,就是成功了

HomeController.cs

        {
           
            OdbcConnection conn = new OdbcConnection();
            conn.ConnectionString = "Driver={IBM INFORMIX ODBC DRIVER};host=192.168.3.102;server=YourServerName;service=8080;protocol=onsoctcp;database=YourDatabaseName;uid=帳號;pwd=密碼;client_locale=zh_tw.utf8;db_locale=zh_tw.utf8;";

            conn.Open();


            conn.Close();

            return View();
        }

連線字串:

host:資料庫的IP位址

service:資料庫用的Port

client_locale和db_locale就看自己公司專案的資料庫的設定吧

6.部署ASP.net的話,記得IIS要「啟用32位元應用程式」

先查看網站使用哪個應用程式集區,然後

 

 

2014.3.20 追記

今天試了老半天,不論是連接64bit的ODBC Driver或32bit的ODBC Driver,都發生錯誤

ERROR [IM006] [Microsoft][ODBC 驅動程式管理員] 驅動程式的 SQLSetConnectAttr 失敗
 
ERROR [IM009] [Informix][Informix ODBC Driver]Unable to load translation DLL.
 
後來從控制台>解除安裝程式,把Client SDK、IBM Data Package等等Driver都移除掉,只留下一個Driver版本,
 
並且電腦右鍵內容的進階系統設定裡的環境變數Path,也只留下一個正在用的Driver的bin目錄路徑後(例:C:\Program Files (x86)\Informix\Connect\bin),然後重開機
 
就可以連線了,所以推測可能ODBC Driver各版本同時裝在同一電腦上會有衝突(?)
 

2014.06.30追記:電腦環境變數Path若沒有設定IBM Informix Client SDK的bin目錄路徑,只設定Setnet32程式也可存取資料庫,請見以下說明

 

2014.06.28追記

1. 其實從底下網友FrankWu留言的線索,就可以把IISEXPRESS改成執行64bit環境,也就可以安裝Informix ODBC Driver (64-bit)版本了

※須注意Visual Studio專案=>屬性 的目標平台為Any CPU(依執行的作業系統位元決定)或x64(強制執行64位元環境)有沒有設好

2.上正式機時一般作業系統都是Windows Server,例如:我實務上專案就是採用Windows Server 2008 R2

好像從Windows Server 2008開始(?),Windows Server只提供64位元版本,所以Windows Server上面的IIS就是執行64bit環境,也因此Informix ODBC Driver(IBM Informix Client SDK)請記得要灌64-bit版本

3.如果Informix ODBC Driver都安裝好,程式都可以正常讀取資料了,可能還會碰到一種棘手情況↓

ERROR [HY000] [Informix][Informix ODBC Driver]Invalid byte in codeset conversion input.

image

這是因為該欄位資料剛剛好包含罕見字,超出程式端執行主機的造字範圍,造成程式掛掉

image

不想讓程式掛掉的解決辦法就是到開始功能表選單找安裝的IBM Informix Connect x.xx版或IBM Informix Client SDK x.xx (64-bit)資料夾裡

image

設定該台主機的環境變數(在Environment頁籤):

CLIENT_LOCALE=zh_tw.utf8(依公司需求填)

DB_LOCALE=zh_tw.utf8(依公司需求填)

GL_USEGLU=1

INFORMIXSERVER=Server名稱

image

image

image

這些環境變數會註冊到主機的Registry中(不是電腦的環境變數Path喔)

然後順便把預設Server也做個設定,切換到Server Information頁籤

image

然後再切到Host Information頁籤

image

全部設定好就按「確定」

如果畫面跳出這個↓,別理它,按確定※因為剛剛的Environment頁籤中的INFORMIXDIR沒有設定關係

image

雖然設定都完成,但有可能程式輸寫出來的文字檔(.net預設是UTF-8編碼),結果可能這樣↓

image

如果出現正方框無法正常顯示的話,請自行連絡你們公司專案的中文造字廠商或其他相關中文造字廠商(例如:文鼎科技,歹勢我只知道這家,沒有打廣告的意思Orz)

中文造字廠商會協助導入4 byte Unicode解決方案

就可以成功顯示文字了↓

image

 

 

 

再來還有一種情況提出來說明,有同樣遭遇的人再往下看

image

↑我本機灌太多Informix ODBC Driver又沒移除乾淨(理論上最好保留一個版本的Driver就好),這樣要設定哪個資料夾的Setnet32程式呢XD?

※懶得判斷就全部資料夾的Setnet32都設定吧~~(逃

判斷方法:

1.進入ODBC管理工具

※須提醒如果你的電腦是64位元作業系統,這方法預設會進到ODBC 64bit管理畫面

image

如果要進入ODBC 32bit管理工具的話↓

按下Windows鍵+R 執行「C:\Windows\SysWOW64\odbcad32.exe」,來執行 32位元ODBC管理工具

2.查看ODBC Driver版本

image

3.看看自己程式的連線字串

image

↑所以目前可歸納,程式使用的是64bit、且版本為4.10的Informix ODBC Driver(IBM Informix Client SDK)

這樣就知道要設定哪個資料夾的Setnet32程式了↓

image

※並非判斷電腦Path環境變數使用哪個C:\Program Files\IBM Informix Client SDK\bin目錄

因為我測試過電腦環境變數Path沒有設定IBM Informix Client SDK的bin目錄路徑,只設定Setnet32程式的話,.Net程式透過ODBC也可存取資料庫

 

2015/06/03 追記

最近由於程式時常發生錯誤System.Data.Odbc.OdbcException (0x80131937): ERROR [HY000] [Informix][Informix ODBC Driver][Informix]System error occurred in network function.

※應該是網路斷線或Connection數佔用太多造成

而意外發現ODBC的Connection Pool啟用方法,啟用之後不但存取資料速度加快,也改善了上述錯誤

odbc

 

參考文章

Informix 32 bit ODBC setup for Windows 7

可能會用到的cmd模式指令(查看電腦Path環境變數):echo %path:;=&echo.%