2012-02-09 90 views
0

檢索到的我有以下選項的下拉列表:DropDownList的值=「」沒有被從數據庫

        <asp:DropDownList ID="ddlTaxStatus" runat="server" OnPreRender="ddlContainerStatus_PreRender"> 
            <asp:ListItem Text="--Select--" Value="-1"></asp:ListItem> 
            <asp:ListItem Value="" Text="'' - Not closed"></asp:ListItem> 
            <asp:ListItem Value="R" Text="R - Ready to pay"></asp:ListItem> 
            <asp:ListItem Value="X" Text="X - Paid"></asp:ListItem> 
            <asp:ListItem Value="C" Text="C - Cancel"></asp:ListItem> 
            <asp:ListItem Value="O" Text="O - Original"></asp:ListItem> 
            <asp:ListItem Value="D" Text="D - Delete"></asp:ListItem> 
           </asp:DropDownList> 

基於用戶選擇的選項,我送所選的選項對搜索我的數據庫和檢索記錄其中有相關字段中的選定值。我的SQL USP是這樣的:

ALTER PROCEDURE [dbo].[uspGetContainerSummaryRecordsForSearch] (
     @fkJobID varchar(8), 
     @csmTaxStatus varchar(3) 
) 
AS 
    BEGIN 
     SET TRANSACTION ISOLATION LEVEL SNAPSHOT 
     SET NOCOUNT ON; 

      SELECT fkJobID, 
         csmContainerID, 
         csmDisplayContainerID, 
         csmTaxStatus 

       FROM ContainerSummaryRecord 
       where fkJobID = @fkJobID 
         AND (@csmTaxStatus IS NULL 
          OR csmTaxStatus = @csmTaxStatus) 

    END 

現在我的問題,當用戶與選擇的選項值=「」和文本=「‘’ - 沒有關閉」,我沒有得到期望的結果。這是因爲value =「」實際上在數據庫中存儲爲null。 在查詢我正在比較在這樣@csmTaxStatus子句IS NULL 輸入參數,因爲如果用戶沒有選擇任何選項意味着文本=「 - 選擇類別」值=「 - 1」,那麼不應用濾波器和所有結果都會返回(這是此選項所需的行爲)。但是這與在數據庫中存儲爲空的Value =「」相沖突。請幫助。

+0

爲什麼不選擇沒有關閉的代碼?稱它Z ..它不會存儲爲空 – 2012-02-09 15:07:52

回答

1

變化where條件作爲

只是利用isnull()輕鬆解決問題,它與空白替換空如下

where fkJobID = @fkJobID      
AND (@csmTaxStatus IS NULL        
    OR isnull(csmTaxStatus,'') = @csmTaxStatus) 
+0

現貨。謝謝 :)。 – 2012-02-10 05:32:26

0

有你能解決這個問題的一些方法,但你可以改變你的SQL語句來處理一個空的csmTaxStatus並將其轉換爲空字符串。如果您將@csmTaxStatus作爲空字符串傳遞,那麼您可以使用ISNULL。

ISNULL(csmTaxStatus, '') = @csmTaxStatus 

完整的SQL語句

SELECT fkJobID, 
    csmContainerID, 
    csmDisplayContainerID, 
    csmTaxStatus 
FROM 
    ContainerSummaryRecord 
WHERE 
    fkJobID = @fkJobID 
    AND ISNULL(csmTaxStatus, '') = @csmTaxStatus