Как пользователю dapper отображать простую хранимую процедуру в c #?

1

Моя сохраненная процедура просто возвращает 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.

Какие-нибудь идеи, что мне здесь не хватает? (или есть ли другой способ назвать это?)

  • 0
    Да, это должно быть "P_GetStringConfig" в методе запроса, или это просто опечатка в этом вопросе, но не в вашем реальном коде?
  • 0
    @Dirk: Извините, это была typo . Обновил вопрос.
Показать ещё 2 комментария
Теги:
stored-procedures
dapper

1 ответ

2
Лучший ответ

Вероятно, вы должны получить свой результат свойства, названный как поле, возвращаемое 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();
  • 0
    Спасибо. Собираюсь попробовать это сейчас. Кстати, Query<T> всегда возвращает List<T> ? Вернется ли теперь просто T ? Потому что SP просто возвращает простое string значение?
  • 1
    @nowhewhomustnotbenamed, если все, что вам нужно, это одно строковое значение, тогда Query<string>(...).SingleOrDefault() будет работать отлично, и не имеет значения, как называется имя столбца . Одно предостережение: вы не сможете определить разницу между «без строки» и «одной строкой с нулевым значением»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню