system.formateexception字符串未被识别为有效的日期时间

本文关键字:有效 日期 时间 识别 formateexception 字符串 system | 更新日期: 2023-09-27 18:25:33

我在以下代码行中收到一个FormatException,消息为"String未被识别为有效的DateTime。":

SqlCommand scmd1 = new SqlCommand("select count(*) Kount  from chequerequests1 where requestdate between '" + DateTime.ParseExact(txtFromDate.Text, "dd-MMM-yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) + " 00:00:00.000' and '" + DateTime.ParseExact(txtToDate.Text, "dd-MMM-yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) + " 23:59:59.999' group by chequebookstatus", sc);
  • 日期格式为"dd/MM/yyyy"
  • 当前的文化是en-GB
  • 我尝试过DateTimeStyles的各种变体,但都没有效果

请提出问题所在。

谢谢。

system.formateexception字符串未被识别为有效的日期时间

您指定了不正确的解析格式:dd-MMM-yyyy
您的文本框采用dd-MM-yyyy格式。

更改格式,传递给ParseExact,它应该可以工作:

SqlCommand scmd1 = new SqlCommand("select count(*) Kount  from chequerequests1 where requestdate between '" + DateTime.ParseExact(txtFromDate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) + " 00:00:00.000' and '" + DateTime.ParseExact(txtToDate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) + " 23:59:59.999' group by chequebookstatus", sc);

通常,最好停止为构建SQL查询而连接字符串,并开始使用SQL参数。

SqlCommand scmd1 = new SqlCommand("select count(*) Kount from chequerequests1 where requestdate between @dateStart and @dateEnd group by chequebookstatus", sc);
DateTime dtStart = DateTime.ParseExact(txtFromDate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture).StartOfDay();
DateTime dtEnd = DateTime.ParseExact(txtToDate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture).EndOfDay();
scmd1.Parameters.AddWithValue("dateStart", dtStart);
scmd1.Parameters.AddWithValue("dateEnd", dtEnd);