使用ODBC的Insight.Database过程调用失败

时间:2015-06-27 17:29:38

标签: sql db2 odbc insight.database

我通过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;}

任何想法都非常感谢!

1 个答案:

答案 0 :(得分:0)

我还没有尝试过使用该版本的db2,但是让我看看我是否可以提供帮助。

1)您是否尝试过在insight.database.providers.db2中使用db2提供程序?

2)你能直接发布odbc / .net的工作示例吗?那么也许我可以看出有什么不同。

最好在github上打开一个问题。我试着在那里处理未解决的问题(虽然我对他们的态度很重要)。