ASP.NET的SqlDataSource,像的SelectCommand(ASP.NET SqlD

2019-10-17 23:53发布

我工作的asp.net。 我有一个SqlDataSource与硬编码在SelectCommand中的查询:

<asp:SqlDataSource ID="DataSource1" runat="server" CancelSelectOnNullParameter="False"
    ConnectionString="<%$ ConnectionStrings:S.Properties.Settings.ConnectionString %>" 
    SelectCommand="SELECT * FROM [table]
    WHERE ([col1] like Case @col1_param When null Then col1 Else @col1_param End)
    and  ([col2] like Case @col2_param When null Then col2 Else @col2_param End)"
    SelectCommandType="Text">
    <SelectParameters>
        <asp:ControlParameter ControlID="TextBox1" Name="col1_param" PropertyName="Text"
            Type="String" />
        <asp:ControlParameter ControlID="TextBox2" Name="col2_param" PropertyName="Text"
            Type="String" />
    </SelectParameters>

我想的是,如果你在一个文本框输入数据而已,数据将只在WHERE子句的文本框的值根据显示。 如果没有值被放置无论是文本框,在执行查询时,就好像没有地方。

眼下这段代码,会发生什么情况是,如果你把一个文本框仅显示任何数据。 如果所有的文本输入框是空的一样。

我不想使用SQL存储过程。

我该如何解决这个问题?

谢谢...

Answer 1:

假设它传递空当没有输入文本,否则你将需要检查空字符串

SelectCommand="SELECT * FROM [table]
    WHERE ([col1] like '%@col1_param%' or @col1_param is null)
    and  ([col2] like '%@col2_param%' or @col2_param is null)"


Answer 2:

这听起来像你希望你的查询可选搜索栏。

您可以使用格式

WHERE @col1_param IS NULL OR [col1] LIKE '%@col1_param%'

财产处理情况未指定参数的情况下。

见对这个问题,我的问题的一个完整的答案。 就算有人做过一个存储过程,但这个概念将举行同样为您的SqlDataSource。



文章来源: ASP.NET SqlDataSource, like on SelectCommand