Моя сохраненная процедура просто возвращает string
. Например: эта хранимая процедура возвращает "en-US"
CREATE PROCEDURE [dbo].[P_GetStringConfig](
@iCode CHAR(20))
AS
BEGIN
SET NOCOUNT ON
SELECT Value
FROM T_SReq_Config WITH (NOLOCK)
WHERE Code = @iCode
IF @@ERROR <> 0
RETURN @@ERROR
RETURN 0
END
Я использую Dapper
следующим образом:
using (var connection = new SqlConnection(GetConnectionString()))
{
var result = connection.Query<ModelClass>(
"P_GetStringConfig",
new {@iCode = "MCode"},
commandType: CommandType.StoredProcedure).First();
}
где мой ModelClass
class ModelClass
{
string result {get;set;}
}
Но получить null
.
Какие-нибудь идеи, что мне здесь не хватает? (или есть ли другой способ назвать это?)
Вероятно, вы должны получить свой результат свойства, названный как поле, возвращаемое SP (значение), но это создает конфликт с зарезервированным ключевым словом
Итак, измените SP, чтобы переименовать поле, возвращаемое как свойство вашей модели
CREATE PROCEDURE [dbo].[P_GetStringConfig](
@iCode CHAR(20))
AS
BEGIN
SET NOCOUNT ON
SELECT Value AS result
FROM T_SReq_Config WITH (NOLOCK)
WHERE Code = @iCode
IF @@ERROR <> 0
RETURN @@ERROR
RETURN 0
END
Кроме того, я предлагаю изменить код для использования FirstOrDefault в случае, если ваш SP не найдет ничего, что ваш код вызовет исключение
var result = connection.Query<ModelClass>("P_GetStringConfig",
new {@iCode = "MCode"},
commandType:CommandType.StoredProcedure)
.FirstOrDefault();
Query<T>
всегда возвращает List<T>
? Вернется ли теперь просто T
? Потому что SP
просто возвращает простое string
значение?
Query<string>(...).SingleOrDefault()
будет работать отлично, и не имеет значения, как называется имя столбца . Одно предостережение: вы не сможете определить разницу между «без строки» и «одной строкой с нулевым значением»
typo
. Обновил вопрос.