2023年10月28日 星期六

informix之.net core EF 套用.

 直接參考這文章做就差不多了
很多人會卡在Scaffold-DbContext這一關
重點是要注意一下PORT ,因為informix EF Core用的是DRDA的port,所以不是之前我們用odbc的(預設)9088而是9089.
如同上述內文說的:Please note: The IBM Data Server providers only works with the Distributed Relational Database Architecture™ (DRDA) protocols, and you therefore need to ensure that your Informix server is configured accordingly.


(這點你要跟你們家的DBA問一下給不給連,也要問網管開不開port,說真的,我也沒把握一次要他們從DEV、UAT到Production這樣一次開這麼多東西給你,所以本單元真的就是自己練功用的)


上述超連結提到的package有點舊了,我實驗的package有update,也都正常
-----------project target framework是.net 6.0------------------



-----------------------------
這是我localhost的scaffold-Dbcontext script,留做我日後小抄用
------------------------------------------------------------- 
Scaffold-DbContext -Connection "user id=informix;server=localhost:9089;database=db_with_log;Password=xxxOOO" -Provider IBM.EntityFrameworkCore -OutputDir Models  -Force -UseDatabaseNames -Tables test_user,test_data

--------------------------------------------
彩蛋一下:
這份PDF不錯,如果你是.net+informix的重度使用者,可以看一下

OS:明明用到的機會渺茫.我還是堅持到底地把它試出來玩了幾番,這也是種職業病吧





2023年10月20日 星期五

拜見老前輩--informix使用記錄(.net 4.5用)

最近因為案子需要,所以接觸到informix

為此在本機(win11)安裝了informix develper version
照理說應該不需要管到informix server的管理,這應該是DBA的工作
不過如果是本機開發測試需要,真的都要自己來

註:以下是為ODBC+.net4.5準備的操作,如果是可以用 .net core開發informix應用的話,請用entity framework core即可,IBM有為.net core發行了相關的EFcore套件.比較不必費心在transaction控管上面.既然上面要求要用.net4.x就老老實實配合就是了

----言歸正傳-----
安裝informix develper server不是問題,我們是用Odbc連線做之後的增刪修查
(因為這樣日後移機會比較好改比較簡單,只要做odbc 設定就好)
雖說「比較簡單」,一點也不簡單
首先來說,你要怎麼測能不能連,當然是用他們自家的工具--ConnectTesst Demo 測比較快

(以上的database下拉可以選才是真的連起來了,有驚嘆號沒選項就是沒連好,仔細看他的訊息,別使戇力猛試)



如果連不上,或是想把上面的host改成ip的話,請到「C:\Program Files\IBM Informix Software Bundle\etc\sqlhosts.ol_informix1410」去改把host pc name改成 ip

--------------------
ol_informix1410 olsoctcp 127.0.0.1 ol_informix1410 
dr_informix1410 drsoctcp 127.0.0.1 dr_informix1410 
lo_informix1410 olsoctcp 127.0.0.1 lo_informix1410 
--------------------
必要時,連「C:\Program Files\IBM Informix Software Bundle\ol_informix1410.cmd」的內容也要改
(連在C:\Windows\System32\drivers\etc\裡的「hosts」也加上本機名稱跟ip對應也再所不惜地改吧)
--------------------

set INFORMIXDIR=C:\PROGRA~1\IBMINF~1
rem set REGMACHINE=\\你的主機名稱    <--先remark起來,以下用ip替代
set REGMACHINE=127.0.0.1
set INFORMIXSERVER=ol_informix1410
set ONCONFIG=onconfig.ol_informix1410
set INFORMIXSQLHOSTS=C:\Program Files\IBM Informix Software Bundle\etc\sqlhosts.ol_informix1410
set GL_USEGLU=1
set PATH=%INFORMIXDIR%\bin;%PATH%
--------------------
這關過了,之後就是ODBC設定了(基本上,「ConnectTest Demo」 能通的話,這也是可以通了)
「可是只能用英文,我要能支援中文的話,可以嗎」

當然可以,而且你也一定不會在內建的「sysxxx」db裡操作(DBA也會把你趕出去的),我們要用別的工具來create db.免驚啦,免錢的哦,他就是鼎鼎大名的DBVisualizer 而且重點不是只有在creeate db而已,是在其連線過程.
一般只會講到這一頁


但是,為了要設定之後的locale,就要用到這一頁了
(注意上面有三個user setting:DB_LOCALE,CLIENT_LOCALE & charSet,一般是沒這三個設定)

這樣後,用DBvisualizer連入informix後,就可以用它來create db了



然後,再回到odbc設定語系,才不會因為語系不同而無法連入
(照理dba會幫你做好db的建置的,但別忘了註明我要中文在地化支援)
看一下中文語系是不是DB的預設語系


這樣你就可以好好享用ODBC + .net操作了
「可是....我怎麼試,transaction總是auto commit,到底要怎樣才能支援transaction?」
「很好,這表示你真的有在玩下去,你可以出山下山了」
想要用.net的OdbcTransaction ,你不只要在odbc那裡把「Auto Commit Optimization」不打勾之外


(以上這點有沒有 check都沒差)
更重要的是.....
在create db時,log mode一定不能選「none」,好歹有個log模式就是了(不知道就用「with log」)


這樣,才會支援交易機制
上述的設定,請參考以下討論
大家加油吧
(忘了跟這次的要角--IBM informix ODBC Driver Setup合影一下,來,笑一個吧)