使用 DateTimePicker 将日期转换为字符串

Converting Date to string with DateTimePicker

        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()

我有 2 个短格式的 DateTimePickers。在SQL中,数据类型为日期的列名"inputdate"。 当我选择天数 <= 12 的日期时,一切正常。当我选择天数 > 12 的日期时,出现此错误。我可以看到这是一天和一个月的问题,但我仍然无法找到解决方案。 非常感谢任何帮助”:从字符串转换日期 and/or 时间时转换失败。

ToShortDateString() 的输出格式对 sql 服务器无效,并且 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更多信息。

试试这个:

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)

我建议你先用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()

基本解决方案是您必须将日期提供为 mm/DD/YYYY 格式或 YYYY-MM-DD 日期格式提供给 ms-sql 查询。

因此,在将日期传递给查询之前,将您的日期转换为 mm/DD/YYYY 格式或 YYYY-MM-DD 格式。