[安裝/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.NET、Connecting to Informix database from .Net、Connecting 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,改天有空再研究
====以下是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,按下編輯
把「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」這個名稱有出現,因為待會連線字串會用到
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,都發生錯誤
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.
這是因為該欄位資料剛剛好包含罕見字,超出程式端執行主機的造字範圍,造成程式掛掉
不想讓程式掛掉的解決辦法就是到開始功能表選單找安裝的IBM Informix Connect x.xx版或IBM Informix Client SDK x.xx (64-bit)資料夾裡
設定該台主機的環境變數(在Environment頁籤):
CLIENT_LOCALE=zh_tw.utf8(依公司需求填)
DB_LOCALE=zh_tw.utf8(依公司需求填)
GL_USEGLU=1
INFORMIXSERVER=Server名稱
這些環境變數會註冊到主機的Registry中(不是電腦的環境變數Path喔)
然後順便把預設Server也做個設定,切換到Server Information頁籤
然後再切到Host Information頁籤
全部設定好就按「確定」
如果畫面跳出這個↓,別理它,按確定※因為剛剛的Environment頁籤中的INFORMIXDIR沒有設定關係
雖然設定都完成,但有可能程式輸寫出來的文字檔(.net預設是UTF-8編碼),結果可能這樣↓
如果出現正方框無法正常顯示的話,請自行連絡你們公司專案的中文造字廠商或其他相關中文造字廠商(例如:文鼎科技,歹勢我只知道這家,沒有打廣告的意思Orz)
中文造字廠商會協助導入4 byte Unicode解決方案
就可以成功顯示文字了↓
再來還有一種情況提出來說明,有同樣遭遇的人再往下看
↑我本機灌太多Informix ODBC Driver又沒移除乾淨(理論上最好保留一個版本的Driver就好),這樣要設定哪個資料夾的Setnet32程式呢XD?
※懶得判斷就全部資料夾的Setnet32都設定吧~~(逃
判斷方法:
1.進入ODBC管理工具
※須提醒如果你的電腦是64位元作業系統,這方法預設會進到ODBC 64bit管理畫面
如果要進入ODBC 32bit管理工具的話↓
按下Windows鍵+R 執行「C:\Windows\SysWOW64\odbcad32.exe」,來執行 32位元ODBC管理工具
2.查看ODBC Driver版本
3.看看自己程式的連線字串
↑所以目前可歸納,程式使用的是64bit、且版本為4.10的Informix ODBC Driver(IBM Informix Client SDK)
這樣就知道要設定哪個資料夾的Setnet32程式了↓
※並非判斷電腦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啟用方法,啟用之後不但存取資料速度加快,也改善了上述錯誤
參考文章
Informix 32 bit ODBC setup for Windows 7
可能會用到的cmd模式指令(查看電腦Path環境變數):echo %path:;=&echo.%