我有一个GridView
和SqlDataSource
。 SelectCommand
类似于
SELECT * FROM Transfers WHERE Timestamp >= '{0}' AND Timestamp <= '{1}'
SqlDataSource
的参数:
<SelectParameters>
<asp:Parameter Name="StartDate" Type="DateTime" />
<asp:Parameter Name="EndDate" Type="DateTime" />
</SelectParameters>
然后在代码后面我设置了这个参数:
protected void gvTransfers_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["@StartDate"].Value = DateTime.Parse(txtStartDate.Text);
e.Command.Parameters["@EndDate"].Value = DateTime.Parse(txtEndDate.Text);
}
我调试了上面的代码并运行并设置了良好的DateTime
值。但是当GridView
被数据绑定时,它会抛出异常
Conversion failed when converting date and/or time from character string.
我花了几个小时研究如何以正确的方式通过DateTime
。我究竟做错了什么?我应该更改SQL,标记或代码吗?
我还尝试了FilterParameters
并以各种格式从文本框中获取日期,但没有成功。
答案 0 :(得分:4)
首先,你应该做两件事:
DateTime.TryParse
(或DateTime.TryParseExact
)。这将允许您将字符串解析为日期,以及获取有关字符串是否已成功解析的信号CultureInfo
。其次,您应该更改SQL查询以改为使用参数,如@ H27Studio所示。
答案 1 :(得分:2)
你必须改变
SELECT * FROM Transfers WHERE Timestamp >= '{0}' AND Timestamp <= '{1}'
的
SELECT * FROM Transfers WHERE Timestamp >= @StartDate AND Timestamp <= @EndDate
有关详细信息,请查看此MSDN帖子:http://msdn.microsoft.com/en-us/library/z72eefad.aspx; - )