2013-03-18 5 views
2

Я использую OrmLite для вызова хранимой процедуры, которая имеет необязательные параметры.Вызов хранимой процедуры с необязательными параметрами с помощью OrmLite

_dbConnection.SqlList<CustomerDTO>("sp_getcustomers @name", new { name = request.Name }); 

Этот оператор генерирует динамическую инструкцию sql с параметром @name. Но я не знаю, как передать null этому параметру, я попытался использовать DBNull.Value, но он не работает. Исключение: Данная клавиша не указана в словаре.

_dbConnection.SqlList<CustomerDTO>("sp_getcustomers @name", new { name = request.Name ?? System.Data.SqlTypes.SqlString.Null}); 

ответ

3

Смотрите эти SqlProviderTests примеры того, как эффективно использовать Sql* APIs OrmLite в.

Правильный способ назвать это что-то вроде:

Db.SqlList<CustomerDTO>("EXEC sp_getcustomers @Name", new { request.Name }); 
+0

Извините, это был код psuedo, который я написал, исправить. Проблема здесь в том, что я могу вызвать SP, если я передаю некоторое значение или пустой параметр имени. Но у меня есть логика в DB, ​​которая проверяет имя = null, поэтому, используя синтаксис выше, я не могу передать значение null или полностью избежать параметра передаваемого имени (что сделано в ADO.NET) – Sunny

+0

«Должен объявить скалярную переменную @Name «Исключение возникает, когда я пытаюсь передать null. – Sunny

+0

Сгенерированный SQL: exec sp_executesql N'EXEC dbo.sp_getcustomers @ name ', N' @ name nvarchar (20) '. Объявление параметра объявления отсутствует. С Dapper, сгенерированный sql, exec dbo.sp_getcustomers @ name = NULL – Sunny

1

Поддержка нулевых параметров в хранимых процедурах была добавлена ​​в commit e6ef83a и выпущена с version 3.9.56 из ServiceStack.OrmLite.

2

Ormlite имеет T4 file для генерации эквивалентов функций C# для SP (для SqlServer); сгенерированные файлы позволяют передавать нулевые значения.

Смежные вопросы