错误&每月13日之后;从字符串转换日期和/或时间时

时间:2012-09-14 13:16:55

标签: c# asp.net sql

以下代码正常工作;从每月的1月1日到12日;但是,只要我点击第13个或更长的日期,我就会收到此错误

Conversion failed when converting date and/or time from character string.

这是我的代码

 DateTime dt = Convert.ToDateTime(Calendar1.SelectedDate.ToString("yyyy-MM-dd"));

    myConnection.Open();
    string cmdStr1 = "SELECT COUNT(*) FROM Payment WHERE PaymentDate = '" + dt + "'";
    SqlCommand PIDexist1 = new SqlCommand(cmdStr1, myConnection);
    int temp1 = Convert.ToInt32(PIDexist1.ExecuteScalar().ToString());
    myConnection.Close();

感谢您的帮助

这是我的数据库2012-01-13

中保存日期的方式

4 个答案:

答案 0 :(得分:6)

不,永远不要约束这样的日期。让.NET数据提供程序为您处理这个问题 - 在App和Sql Server上使用locales存在太多陷阱,您可以使用字符串作为日期。

myConnection.Open();
string cmdStr1 = "SELECT COUNT(*) FROM Payment WHERE PaymentDate = @dt'";
SqlCommand PIDexist1 = new SqlCommand(cmdStr1, myConnection);
SqlParameter parameter = PIDexist1.Parameters.Add("@dt", System.Data.SqlDbType.DateTime);
parameter.Value = dt;
...

答案 1 :(得分:2)

因为它试图将13转换为月份。

尝试使用DateTime.Parse("...", [Culture])并指定适当的文化。

答案 2 :(得分:0)

您很可能遇到DD-MM-YY vs MM-DD-YY情况。它有点巧合,直到有12个月的第12天才有效。尝试更明确地使用日期;也许使用三个字母的月份代码。

答案 3 :(得分:0)

无需转换日期.ToString()。只需使用SelectedDate DateTime值作为SqlCommand查询的命名参数。如果您只需要一天,请使用DateTime.Date属性