[英]Insight.Database procedure call using ODBC fails
我正在通過ODBC提供程序在C#中使用Insight.Database連接到iSeries DB2數據庫。 在db2中有一個存儲的過程稱為InsertBeer。 以下所有通話均效果很好!:
List<Beer> beers = conn.QuerySql<Beer>("SELECT * FROM Beer WHERE Typee = @Typee", new { Typee = "IPA" }).ToList();
var beer = new Beer { ID=41,Typee="Medium", Description = "From dotNet Neither light or dark"};
conn.ExecuteSql("INSERT INTO Beer VALUES (@ID, @Typee, @Description)", new { ID = 4, Typee = "Medium", Description = "From dotNet Neither light or dark" });
conn.ExecuteSql("CALL INSERTBEER (@ID, @Typee, @Description) ", new { ID = 4, Typee = "MediumOD", Description = "From dotNet Neither light or dark" });
conn.ExecuteSql("INSERT INTO Beer VALUES (@ID, @Typee, @Description)", beer);
太棒了,我真的在研究這個微型ORM。 這場戰斗已經贏了一半,上面的調用中的啤酒對象節省了很多手工參數綁定。 但是我不想在對InsertBeer存儲過程的調用中鍵入LHS參數。 我相信這是使用Insight Execute()方法避免的水暖工作類型。 可悲的是,這些調用不起作用:
conn.Execute("INSERTBEER", beer);
我也嘗試過:
conn.Execute("insertbeer", new Beer {ID = 4, Typee = "Medium", Description = "From dotNet Neither light or dark"}, CommandType.StoredProcedure, true, Int32.MaxValue, null, beer);
我得到的錯誤是:
{“錯誤[42000] [IBM] [系統i Access ODBC驅動程序] [DB2 for i5 / OS] SQL0104-令牌INSERTBEER無效。有效令牌:(CL結束GET SET CALL DROP FREE HOLD LOCK OPEN WITH。”
任何想法,不勝感激!
我沒有嘗試使用該版本的db2進行洞察,但是讓我看看是否可以提供幫助。
1)您是否嘗試在Insight.database.providers.db2中使用db2提供程序?
2)您可以直接在odbc / .net上發布工作示例嗎? 然后也許我可以看到有什么區別。
最好在github上打開一個問題。 我嘗試解決那里的未解決問題(盡管我落后於他們)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.