0

下面的代码工作正常;每月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

4 回答 4

6

不,永远不要像那样绑定日期。让 .NET 数据提供程序为您处理这个问题 - 应用程序和 Sql Server 上的语言环境存在太多陷阱,您无法将字符串用作日期。

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;
...
于 2012-09-14T13:19:21.187 回答
2

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

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

于 2012-09-14T13:18:25.993 回答
0

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

于 2012-09-14T13:19:49.520 回答
0

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

于 2012-09-14T13:20:42.403 回答