DropDownList value = "" не извлекается из базы данных - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть выпадающий список со следующими параметрами:

                                    <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 = "" и Text = "'' - Not closed", я не получаю желаемого результата. Это потому, что значение = "" на самом деле хранится как ноль в БД. В запросе я сравниваю входной параметр в предложении где, как это @csmTaxStatus IS NULL потому что если пользователь не выбрал ни одного параметра, означающего Text = "- Select--" Value = "- 1", то фильтр не применяется, и все результаты возвращаются (и это желаемое поведение для этого параметра). Но это конфликтует с Value = "", который хранится как ноль в БД. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

изменить, где условие как

просто используйте isnull(), чтобы легко решить проблему, заменяя пустое значение пустым, как показано ниже

where  fkJobID = @fkJobID                       
AND ( @csmTaxStatus IS NULL                              
     OR isnull(csmTaxStatus,'') = @csmTaxStatus ) 
0 голосов
/ 09 февраля 2012

Существует несколько способов исправить это, но вы можете изменить свой оператор SQL для обработки значения NULL в csmTaxStatus и преобразовать его в пустую строку. Если вы передаете @csmTaxStatus как пустую строку, вы можете использовать ISNULL.

ISNULL( csmTaxStatus, '' ) = @csmTaxStatus 

Полный оператор SQL

SELECT fkJobID,
    csmContainerID,
    csmDisplayContainerID,
    csmTaxStatus
FROM   
    ContainerSummaryRecord
WHERE
    fkJobID = @fkJobID
    AND ISNULL( csmTaxStatus, '' ) = @csmTaxStatus 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...