我有一个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>
有人知道如何解决此问题
由于
答案 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日。