Сбой вызова процедуры Insight.Database с использованием ODBC

Я использую Insight.Database в C# через поставщика ODBC для подключения к базе данных DB2 iSeries. В 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. Уже полдела выиграно, объект пива в вызове выше экономит тонны ручной привязки параметров. Но я не хочу вводить параметры LHS при вызове хранимой процедуры InsertBeer. Я считаю, что это тот тип сантехнических работ, который должен был быть предотвращен с помощью метода 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][Драйвер ODBC для System i Access][DB2 для i5/OS]SQL0104 - Токен INSERTBEER недействителен. Допустимые токены: ( CL END GET SET CALL DROP FREE HOLD LOCK OPEN WITH."}}

Любые идеи с благодарностью!

1 ответ

Я не пробовал понять с этой версией db2, но дай мне посмотреть, смогу ли я помочь.

1) Вы пытались использовать провайдера db2 в insight.database.providers.db2?

2) Можете ли вы опубликовать рабочий пример с odbc/.net напрямую? Тогда, возможно, я смогу увидеть, в чем разница.

Лучше всего открыть вопрос на GitHub. Я пытаюсь позаботиться об открытых проблемах там (хотя я отстаю от них).

Другие вопросы по тегам