Dim sql As String = "SELECT * FROM old where inputdate BETWEEN '" + DateTimePicker2.Value.ToShortDateString() + "' AND '" + DateTimePicker3.Value.ToShortDateString() + "';"
Dim dataadapter As New SqlDataAdapter(sql, connection)
Dim ds As New DataSet()
connection.Open()
dataadapter.Fill(ds, "old_table")
connection.Close()
我有两个格式为Short的DateTimePickers。在SQL中,列名称为" inputdate" DataType:date。 当我选择日期< = 12的日期时,一切正常。当我选择日期> 12,我有这个错误。我可以看到它是日常和月份的问题,但我仍然无法获得解决方案。 非常感谢任何帮助":从字符串转换日期和/或时间时转换失败。
答案 0 :(得分:4)
我建议您使用Parameter
来使用SqlDbType.DateTime
,然后将DateTime
直接传递给参数(不需要转换),同时避免使用SQL
注射,像这样:
Dim sql As String = "SELECT * FROM old where inputdate BETWEEN @startDate AND @endDate;"
Dim cmd As New SqlCommand(sql, connection)
cmd.Parameters.Add("@startDate", SqlDbType.DateTime).Value = DateTimePicker2.Value
cmd.Parameters.Add("@endDate", SqlDbType.DateTime).Value = DateTimePicker3.Value
Dim dataadapter As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
connection.Open()
dataadapter.Fill(ds, "old_table")
connection.Close()
答案 1 :(得分:1)
ToShortDateString()
的输出格式对sql server无效,sql将天数与月份混合。
试试这个
Dim sql As String = "SELECT * FROM old where inputdate BETWEEN '" + DateTimePicker2.Value.ToString("yyyy-MM-dd") + "' AND '" + DateTimePicker3.Value.ToString("yyyy-MM-dd") + "';"
阅读this了解更多信息。
答案 2 :(得分:1)
试试这个:
Dim dt1 as sring = String.Format("{0:yyyy/MM/dd}", Convert.ToDateTime(DateTimePicker2.Value.ToShortDateString()))
Dim dt2 as sring = String.Format("{0:yyyy/MM/dd}", Convert.ToDateTime(DateTimePicker3.Value.ToShortDateString()))
Dim sql As String = "SELECT * FROM old where inputdate BETWEEN '" + dt1 + "' AND '" + dt2 + "';"
Dim dataadapter As New SqlDataAdapter(sql, connection)
答案 3 :(得分:0)
基本的解决方案是你必须在mm-DD / YYYY格式或YYYY-MM-DD日期格式中提供ms-sql查询日期。
因此,在将日期传递给查询之前,请将日期转换为mm / DD / YYYY格式或YYYY-MM-DD格式。