2014-08-28 41 views
1

我的存儲過程只是返回一個string。例如:此存儲過程返回"en-US"如何使用簡潔的C#映射簡單的存儲過程?

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」,或者僅僅是這個問題中的錯字,而不是實際的代碼中的錯字? – Dirk 2014-08-28 09:32:30

+0

@Dirk:對不起,這是一個'打字錯誤'。更新了問題。 – 2014-08-28 09:39:05

+0

你想要選擇查詢的結果還是返回語句的結果? – Dirk 2014-08-28 09:41:24

回答

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 '總是返回一個'List '?現在它只會返回一個'T'嗎?因爲,'SP'只是返回一個簡單的'string'值? – 2014-08-28 09:45:00

+1

@nowhewhomustnotbenamed如果你想要的是一個字符串值,然後'查詢(...)的SingleOrDefault()'會很好地工作,而**不要緊列名是什麼**。一個警告:你將無法區分「無行」和「有空值的行」 – 2014-08-28 10:03:25