ControlParameter中的日期会导致日期格式错误

时间:2014-01-06 12:24:24

标签: asp.net sql vb.net sqldatasource

我有一个vb.net网站,其中有一个SQLDataSource,其日期为ControlParameter。这在英国可以正常工作,但是当在德国打开同一页面时,由于日期格式不同,它会产生错误。

请参阅下面的示例代码

<asp:SqlDataSource ID="SQL" runat="server" ConnectionString="<%$ ConnectionStrings:xxxxxxxx %>"
    SelectCommand="
       SELECT * 
       from data
       where 
       DATEADD(minute, time, date) > convert(datetime,@dt,104)
">
    <SelectParameters>
        <asp:ControlParameter ControlID="DateSelection" Name="dt" PropertyName="SelectedItem.text" />
    </SelectParameters>
</asp:SqlDataSource>

有人知道如何解决此问题

由于

1 个答案:

答案 0 :(得分:0)

我真的不了解你的SQL逻辑,所以假设逻辑是合理的,我怀疑主要原因是因为SelectedItem的输出被视为string

如果客户端PC的日期格式为“dd / MM / yyyy”,则string"31/12/2014"可以解释为2014年12月31日。

但如果客户端PC的日期格式为“MM / dd / yyyy”,则会出现错误,因为没有第31个月。

您可以尝试在后端设置ControlParameter,而不是在前端使用SelectCommand,这样可以让您更自由地操作数据。


aspx页面:

<asp:SqlDataSource ID="SQL" runat="server" ConnectionString="<%$ ConnectionStrings:xxxxxxxx %>" 
    SelectCommand="" >
</asp:SqlDataSource>

aspx.vb页面:

'assuming "SelectedItem" is a textbox
dim str As String = Convert.ToDateTime(SelectedItem.Text).ToString("dd MMM yyyy")

SQL.SelectCommand = "SELECT * from data where DATEADD(minute, time, date) > convert(datetime," + str + ",104)"


我将日期转换为“dd MMM yyyy”格式的原因是因为无论PC使用的日期格式如何,“2014年12月31日”将始终视为2014年12月31日。