在SQL和c#中发牢骚日期

时间:2013-03-13 12:53:02

标签: c# sql visual-studio-2010 sql-server-2008

我正在开发一个C#应用程序,我在SQL Server中有一个date列。

我正在使用DateTimePicker基于日期执行查询。我已将日期时间选择器的格式更改为简短,现在它将日期显示为mm-dd-yyyy

现在执行时我从日期1-12得到正确的输出,但是一旦我选择了13日期,我就会收到错误

  从字符串

转换日期/时间时

转换失败

我不知道发生了什么!

1 个答案:

答案 0 :(得分:4)

我怀疑你正在使用DateTimePicker中的格式化字符串,通过格式字符串或连接来动态构建SQL查询。

不要那样做。

SQL中的日期/时间字符串文字倾向于使用合理的格式(即ISO 8601),其中部分的顺序不同。事实上,当你将一件作品从12变为13时它会爆炸,这实际上会让它消失。

SqlCommand有参数(您可以在@foo的查询中插入。使用这些参数将确保以正确的方式传递所有内容并正确引用:

using (SqlCommand c = connection.CreateCommand()) {
    c.CommandText = "Select roll_number,name from Attendance_table where date=@date";
    c.Parameters.AddWithValue("date", dateTimePicker1.Value);
    using (var r = c.ExecuteReader()) {
        ...
    }
}

(粗略 - 您应该查阅文档以了解正确使用情况,我写这些东西已经有一段时间了)