我通过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()方法要避免的管道工作类型。可悲的是,这些叫做DONT的工作:
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);
我得到的错误是:
{&#34; ERROR [42000] [IBM] [System i Access ODBC Driver] [DB2 for i5 / OS] SQL0104 - 令牌INSERTBEER无效。有效代币:( CL END GET SET CALL DROP FREE HOLD LOCK OPEN WITH。&#34;}
任何想法都非常感谢!
答案 0 :(得分:0)
我还没有尝试过使用该版本的db2,但是让我看看我是否可以提供帮助。
1)您是否尝试过在insight.database.providers.db2中使用db2提供程序?
2)你能直接发布odbc / .net的工作示例吗?那么也许我可以看出有什么不同。
最好在github上打开一个问题。我试着在那里处理未解决的问题(虽然我对他们的态度很重要)。