在我的asp.net程序中进行日期范围搜索时出现以下错误。
从字符转换日期和/或时间时转换失败 串
这是搜索的代码。请帮忙。我还想在网格视图中仅显示日期而不显示日期和时间。
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource2">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True"
SortExpression="ID" />
<asp:BoundField DataField="Story_number" HeaderText="Story_number" SortExpression="Story_number" />
<asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
<asp:BoundField DataField="Memory_card" HeaderText="Memory_card" SortExpression="Memory_card" />
<asp:BoundField DataField="Story_Name" HeaderText="Story_Name" SortExpression="Story_Name" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:IngestConnectionString %>"
SelectCommand="SELECT ID, Story_number, Date, Memory_card, Story_Name FROM Library WHERE (Story_Name LIKE '%' + @Story_Name + '%') AND (Story_number LIKE '%' + @Story_number + '%') AND (@startDate IS NULL OR Date >= @startdate) AND (@enddate IS NULL or Date <= @enddate)">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="Story_Name" PropertyName="Text"
DefaultValue="%" />
<asp:ControlParameter ControlID="TextBox2" DefaultValue="%" Name="Story_number" PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox3" DefaultValue="" Name="startdate" PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox4" Name="enddate" DefaultValue="" PropertyName="Text" />
</asp:SqlDataSource>
答案 0 :(得分:1)
您不应将%
标记附加到您的日期。这是一个通配符运算符,仅适用于LIKE
表达式。
你只需要
(Date BETWEEN @startdate AND @enddate)
过滤到日期范围。
要允许空日期,您必须切换到布尔逻辑,而不是使用之间:
(@startDate IS NULL OR Date >= @startdate) AND (@enddate IS NULL or Date <= @enddate)
答案 1 :(得分:0)
以下代码解决了将null传递给数据库的问题。
CancelSelectOnNullParameter="False"
下的代码
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
CancelSelectOnNullParameter="False"
ConnectionString="<%$ ConnectionStrings:IngestConnectionString %>"
SelectCommand="SELECT ID, Story_number, Date, Memory_card, Story_Name FROM Library WHERE (Story_Name LIKE '%' + @Story_Name + '%') AND (Story_number LIKE '%' + @Story_number + '%') AND (@startdate IS NULL OR @startdate = '' OR Date >= @startdate) AND (@enddate IS NULL OR @enddate = '' OR Date <= @enddate)">
<SelectParameters>