我有以下代码:
da = New OleDbDataAdapter("SELECT * FROM [Transactions] WHERE [TransDate] = #" & Format(StartDatePicker.Value, "dd/mm/yyyy"), myConnection)
当我选择日期值大于12的日期时,它通常使用dd / mm / yyyy格式,但是当我选择12以下的日期时,它使用mm / dd / yyy格式。
我正在使用vb.net和ms访问。
答案 0 :(得分:1)
Plutonix已经解释过日期是一个日期,格式仅供人类使用。以下是您的代码的修订版本,无论文化如何都可以使用:
Dim sql As string = <sql>SELECT * FROM [Transactions]
WHERE [TransDate] >= @tStart and [TransDate] < @tEnd
</sql>.Value
Dim da = New OleDbDataAdapter(sql, myConnection)
Dim start = StartDatePicker.Value.Date
Dim end = StartDatePicker.Value.Date.AddDays(1)
da.SelectCommand.Parameters.AddWithValue("@tStart", start)
da.SelectCommand.Parameters.AddWithValue("@tEnd", end)
答案 1 :(得分:0)
我弄清楚问题出在哪里。从数据库中读取08/12/2016令人困惑。它读作mm / dd / yyyy,而15/12/16读作dd / MM / yyyy。我将datepicker设置为yyyy / MM / dd。非常感谢您的帮助
答案 2 :(得分:0)
您在SQL中使用错误的格式来表示日期值的字符串表达式。因此:
da = New OleDbDataAdapter("SELECT * FROM [Transactions] WHERE [TransDate] = #" & Format(StartDatePicker.Value, "yyyy\/mm\/dd"), myConnection)
请注意,该格式与您希望用于显示日期的格式无关。
此外,虽然这会有效,但请吸收使用更聪明方法的评论。