2013-11-24 65 views
0

我有一個datareader從我的存儲過程中獲取結果。存儲過程取決於某些值,如(「ismarried」= true)會返回10個庫侖,但如果(「ismarried」= false)返回5列。Sqldatareader可選參數

在我的asp.net頁面中,我的datareader期望10列無論是什麼,並想知道是否有一種方法在我的asp.net c#代碼中有可選參數。我知道你可以在SQL中使用 ISNULL(「Column」,''),但是我希望有一種方法可以告訴我的數據讀取器這5個參數可能並不總是存在。

感謝

+0

如果期望10列,那麼你必須給它10列。 「我知道1 + 1 = 2,但我希望它= 3!」 – NathanAldenSr

+0

Nathan顯然你不能根據其他看起來有可能的答案來思考你的盒子外面。 – Tim

回答

1

你可以告訴該存儲過程使用FieldCount屬性返回多少列。如果它返回5或10,你的代碼可以做出相應的反應。

+0

謝謝工作完美! – Tim

0

我所做的是動態創建查詢。我使用字符串生成器來連接查詢,如果某個值的值爲null或爲空,那麼在未添加參數的代碼中以及未添加條件的地方。

0

而不是檢查返回的列,然後映射基礎領域等的計數的,更清潔的解決方案是創建一個類,讓我們說人是這樣的...

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool IsMarried { get; set; } 
    //etc... 
} 

然後,您可以使用dapper來回報您的結果......

var people = cnn.Query<Person>("spName", 
        commandType: CommandType.StoredProcedure).ToList(); 

短小精悍將字段映射到你的類屬性,而忽略任何缺少的領域。請注意,屬性名稱將需要與數據庫中的字段名稱匹配。這將減少任何邏輯檢查,並且必須手動將每個屬性映射到返回的字段。