總結
莫名其妙,用到絕望。
有改善,但還不夠。
緣由
距前一篇也快一年了,來看看有何改變。
評測兩項 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 的部分也完成了...
Dear Sir,
回覆刪除不確定有無用處,參考看看 dcomcnfg
https://stackoverflow.com/questions/1403946/transactionscope-wont-work-with-db2-provider
感謝回復。留言沒有通知信,以至於現在才看到你的留言,請見諒。
刪除