再論 Informix 的 .NET 存取工具

總結

莫名其妙,用到絕望。
有改善,但還不夠。

緣由

前一篇也快一年了,來看看有何改變。
評測兩項 IBM 官方的 .NET 程式庫
  • .NET Framework
    • IBM Data Server Driver Package (後稱 DB2N)
      • 也可安裝 IBM Data Server Client,兩者函式庫內容一樣。但為了你好,建議安裝 IBM Data Server Driver Package。
      • 版本:IBM Data Server Driver Package (Windows/x86-64 64 bit) V11.1.4 Fix Pack 4 (11.1.4040.491)。
  • .NET Core
    • IBM.Data.DB2.Core (後稱 DB2C)
      • 用的是 NuGet 下的 Windows 環境,沒測 Linux 及 macOS 。IBM 網站上也是同樣的東西,建議用 NuGet 即可。
      • 版本:1.3.0.100 (2018-11-28)

BIG5讀取、寫入


  • DB2N
    • 沒問題
  • DB2C
    • 沒問題

交易

請先用 select * from sysmaster:sysdatabases 確認目標 database 是否使用 log 模式。

交易使用 connection.BeginTransaction

  • DB2N
    • ConnectionString 改成 enlist=false
      • 沒問題
    • ConnectionString 改成 enlist=true
      • 沒問題
  • DB2C
    • ConnectionString 改成 enlist=false
      • 沒問題
    • ConnectionString 改成 enlist=true
      • 沒問題

交易使用 TransactionScope

這部分 ConnectionString enlist 必須設定成 true,enlist 預設為true。
舉例:"Database=db123;User ID=pig;Password=iampig;Server=192.168.1.1:1551;enlist=true"。
  • DB2N
    • ConnectionString 改成 enlist=true
      • 於 connection.Open() 發生例外。
        • ERROR [58005] [IBM][IDS/UNIX64] SQL0998N  交易或依經驗判斷的處理程序期間發生了錯誤。原因碼 = "16"。 子碼 = "2-FFFFFFFF8004D026"。
    • ConnectionString 改成 enlist=false
      • 於 connection.Open() 發生例外。
        • ERROR [58005] [IBM][IDS/UNIX64] SQL0998N  交易或依經驗判斷的處理程序期間發生了錯誤。原因碼 = "16"。 子碼 = "2-FFFFFFFF8004D026"。
  • DB2C
    • ConnectionString 改成 enlist=true
      • TransactionScope 沒呼叫 Complete 的部分也完成了...
    • ConnectionString 改成 enlist=false
      • TransactionScope 沒呼叫 Complete 的部分也完成了...

留言

  1. Dear Sir,
    不確定有無用處,參考看看 dcomcnfg
    https://stackoverflow.com/questions/1403946/transactionscope-wont-work-with-db2-provider

    回覆刪除
    回覆
    1. 感謝回復。留言沒有通知信,以至於現在才看到你的留言,請見諒。

      刪除

張貼留言

歡迎留言給我們