2012-01-08 26 views
0

我正在使用SqlDataSource控件列出用户选择日期时的搜索结果,如果日期为空,则列出所有记录。SqlDataSource ControlParameter空值

<asp:SqlDataSource ID="SqlDataSource1" runat="server" meta:resourcekey="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:Test_ConnectionString %>" 
SelectCommand="select MeetingID, MeetName as MeetingName, MeetDate, MeetTime from Meeting where Status ='Recorded' and Case when @sel_to_date ='' then MeetDate <= '2200-12-31' else MeetDate = @sel_to_date end order by MeetDate desc, Meettime desc "> 
<SelectParameters>       
<asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="datepicker" Name="sel_to_date" DefaultValue="" PropertyName="Text" Type="String"/> 
</SelectParameters> 
</asp:SqlDataSource> 

但它返回语法错误。

我希望所有用户列出用户离开文本框时的所有记录。怎么做?

问候, 乔

回答

0

您的case声明不正确。 SQL中的case语句应该返回一个值,而不是执行比较。见CASE (Transact-SQL)

一个解决方案是用一个有条件像这样更换case

select 
    MeetingID, MeetName as MeetingName, MeetDate, MeetTime 
from Meeting 
    where Status ='Recorded' 
    and 
    (
     (@sel_to_date ='' and MeetDate <= '2200-12-31') 
     or 
     MeetDate = @sel_to_date 
    ) 
order by MeetDate desc, Meettime desc 

为方便起见,这里是单行,所以你可以把它复制,粘贴到数据源声明:

select MeetingID, MeetName as MeetingName, MeetDate, MeetTime from Meeting where Status ='Recorded' and ((@sel_to_date ='' and MeetDate <= '2200-12-31') or MeetDate = @sel_to_date) order by MeetDate desc, Meettime desc 
+0

非常感谢。有用 – 2012-01-08 11:49:00

1
<asp:SqlDataSource ID="SqlDataSource1" runat="server" meta:resourcekey="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:Test_ConnectionString %>" 
SelectCommand="select MeetingID, MeetName as MeetingName, MeetDate, MeetTime from Meeting where Status ='Recorded' and Case when @sel_to_date is null then MeetDate <= '2200-12-31' else MeetDate = @sel_to_date end order by MeetDate desc, Meettime desc "> 
<SelectParameters>       
<asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="datepicker" Name="sel_to_date" DefaultValue="" PropertyName="Text" Type="String"/> 
</SelectParameters> 
</asp:SqlDataSource> 

我没有检查,但如果你通过比其转换为null,所以你必须检查 @sel_to_date空值为null,而不是@sel_to_date =“” 用我代码片段。