2013-04-09 82 views
1

我正在处理asp.net。我有一个SqlDataSource用硬编码的SelectCommand上查询: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存储过程。

我该如何解决这个问题?

谢谢...

回答

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)" 
+0

谢谢!!!!!!!!!!! – trek 2013-04-09 04:31:24

0

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

您可以使用格式

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

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

查看my question on the issue获得完整答案。当然,它是作为一个存储过程完成的,但这个概念对于你的SQLDataSource将保持不变。

相关问题