Sql Query在Management Studio中工作但不在程序中工作

时间:2011-11-25 04:59:16

标签: asp.net sql parameters drop-down-menu string

请考虑以下问题。

SELECT     LP.project_id, LP.title, LP.type, LU.NAME, LP.reference, LP.status, LP.correspondence, LP.source, LP.deadline, LP.mstat, LP.num_pages, LP.done, 
                      LP.ss_notes
FROM         LogiCpsProjects AS LP LEFT OUTER JOIN
                      LogiCpsProjectAssignments AS LPA ON LP.project_id = LPA.project_id LEFT OUTER JOIN
                      LogiCpsUsers AS LU ON LPA.writer_id = LU.ID
WHERE     (LP.status <> 'Closed') AND (LP.status <> 'Cancelled') AND (LP.type LIKE '%' + @type + '%') AND (LP.status LIKE '%' + @status + '%') AND 
                      (LP.source LIKE '%' + @source + '%') AND (CAST(LP.mstat AS VARCHAR(50)) LIKE '%' + @mstat + '%')
ORDER BY LP.project_id

在这个查询中,我试图进行基于四个参数的搜索,即@ type,@ status,@ source和@mstat。问题是此查询与Sql Server Management Studio中的查询完全一样,例如,如果我在类型参数中输入“Article”并将其他人留空,则返回type ='Article'的所有记录,如果我输入type ='Article '和status ='工作'然后它返回所有类型为''Article'和status ='Working'等等的记录...简单来说,搜索是动态的,因为用户可以输入将所有参数留空或将值放入所有四强。它在MS中运行良好,但在实际程序中却没有。

我正在使用一个SqlDataSource,如果我将所有参数留空都不会返回任何内容,如果我输入1参数它仍然不返回任何内容,它只返回记录,如果我输入所有四个参数,这意味着它是不处理空白参数。要发送参数我使用四个下拉列表。所有这些看起来都像这样。

        <asp:DropDownList ID="ddlStatus" runat="server" Width="220px">
<asp:ListItem Selected="True" Value="" Text="">All</asp:ListItem>
<asp:ListItem>Details Pending</asp:ListItem>
<asp:ListItem>Working</asp:ListItem>
<asp:ListItem>Awaiting Feedback</asp:ListItem>
<asp:ListItem>Project Complete (AFB)</asp:ListItem>
<asp:ListItem>Revision Required Client</asp:ListItem>
<asp:ListItem>Revision Required Editor</asp:ListItem>
<asp:ListItem>To be Cancelled</asp:ListItem>
<asp:ListItem>Cancelled</asp:ListItem>
<asp:ListItem>Requirements Not Clear</asp:ListItem>
<asp:ListItem>Hold</asp:ListItem>
<asp:ListItem>Closed</asp:ListItem>
    </asp:DropDownList>

第一项定义为ALL,它的值和文本设置为“”(空字符串),因此当用户选择ALL时,它表示该特定参数的所有记录。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

注意您是为所有参数发送空字符串还是空白字符串。如果你在管理工作室中运行sql语句“select'%'+ null +'%'”,你会发现结果为null,这不是你想要的。