【问题标题】:DropDownList value="" no being retrieved from DatabaseDropDownList value="" 没有从数据库中检索到
【发布时间】:2012-02-09 14:58:12
【问题描述】:

我有一个包含以下选项的下拉列表:

                                    <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" 的选项时,我没有得到想要的结果。这是因为 value="" 实际上在 DB 中存储为 null。 在查询中,我正在比较 where 子句中的输入参数,例如 @csmTaxStatus IS NULL 因为如果用户没有选择任何表示 Text="--Select--" Value="-1" 的选项,则不会应用过滤器并返回所有结果(这是此选项所需的行为)。但这与在 DB 中存储为 null 的 Value="" 冲突。请帮忙。

【问题讨论】:

  • 为什么不选择未关闭的代码?称它为 Z.. & 它不会存储为 null

标签: asp.net sql


【解决方案1】:

改变where条件为

只需使用isnull() 即可轻松解决将 null 替换为空白的问题,如下所示

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

【讨论】:

    【解决方案2】:

    有几种方法可以解决此问题,但您可以更改 SQL 语句以处理 csmTaxStatus 中的 NULL 并将其转换为空字符串。如果您将 @csmTaxStatus 作为空字符串传入,则可以使用 ISNULL。

    ISNULL( csmTaxStatus, '' ) = @csmTaxStatus 
    

    完整的 SQL 语句

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

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      相关资源
      最近更新 更多