1

我有一个查询 mysql 数据库的 vb.net 程序。我可以使用以下代码搜索并获取日期之间的记录:

sqlQRY12 = "SELECT * from mating WHERE date BETWEEN '" & export_daily_date_DateTimePicker1.Text & "' AND '" & export_daily_date_DateTimePicker2.Text & "' AND chkbox = '0' ORDER BY lot_id ASC"

我的日期格式是:

        export_daily_date_DateTimePicker1.Format = DateTimePickerFormat.Custom
    export_daily_date_DateTimePicker1.CustomFormat = "MM/dd/yy"

    export_daily_date_DateTimePicker2.Format = DateTimePickerFormat.Custom
    export_daily_date_DateTimePicker2.CustomFormat = "MM/dd/yy"

但是,如果我尝试在 2013 年 12 月 20 日至 2014 年 2 月 20 日这样的两年之间进行搜索,当我知道它们存在时,我不会返回任何记录?任何帮助都会很棒

4

2 回答 2

1

通常,在数据库查询中以字符串形式表示的日期应采用“YYYY-MM-DD”格式。

您基本上希望您执行的查询是这样的:

SELECT * from mating
WHERE date BETWEEN '2013-12-20' AND '2014-02-20'

因此,将 dtpickers 的格式更改为 yyyy-mm-dd,如下所示:

export_daily_date_DateTimePicker1.Format = DateTimePickerFormat.Custom
export_daily_date_DateTimePicker1.CustomFormat = "yyyy-MM-dd"

export_daily_date_DateTimePicker2.Format = DateTimePickerFormat.Custom
export_daily_date_DateTimePicker2.CustomFormat = "yyyy-MM-dd"
于 2014-02-13T18:01:37.643 回答
1

您永远不应该将值连接到您的 SQL 命令中。如果可能,您应该使用参数。使用参数,您可以将值指定为实际类型 ( Date) 而不是字符串表示形式。ADO 提供程序将为您正确地转换值。

cmd.CommandText = "SELECT * from mating WHERE date BETWEEN @date1 AND @date2 AND chkbox = '0' ORDER BY lot_id ASC"
cmd.Parameters.AddWithValue("@date1", export_daily_date_DateTimePicker2.Value)
cmd.Parameters.AddWithValue("@date2", export_daily_date_DateTimePicker2.Value)
于 2014-02-13T18:22:11.700 回答