Сбой вызова процедуры 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. Я пытаюсь позаботиться об открытых проблемах там (хотя я отстаю от них).