使用DateTimePicker将Date转换为字符串

时间:2016-05-07 08:45:37

标签: sql vb.net datetimepicker datetime-format

        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,我有这个错误。我可以看到它是日常和月份的问题,但我仍然无法获得解决方案。   非常感谢任何帮助":从字符串转换日期和/或时间时转换失败。

4 个答案:

答案 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格式。