【发布时间】:2011-09-18 19:59:31
【问题描述】:
我正在使用 OleDb,尝试这样做:
Dim d as Date = DateSerial(Year(rptDate), Month(rptDate), 1 - 1)
Dim conn as OleDbConnection = new OleDbConnection(connStr)
Dim cm as OleDbCommand = new OleDbCommand()
conn.Open()
cm.Connection = conn
cm.CommandText = "SELECT * FROM history WHERE ReportDate = " & d
好的,所以我知道它返回 1 行,因为我在 SQL Server 中盯着它。到目前为止,这是我对最后一行中的查询所做的尝试,但没有任何效果:
"SELECT * FROM history WHERE ReportDate = " & d
"SELECT * FROM history WHERE ReportDate = " & d.toString("G")
"SELECT * FROM history WHERE ReportDate = '" & d & "'"
"SELECT * FROM history WHERE ReportDate = '" & d.toString("G") & "'"
"SELECT * FROM history WHERE ReportDate = '#" & d & "#'"
"SELECT * FROM history WHERE ReportDate = #" & d & "#" 'These last 2 with toString
我也试过了:
cm.CommandText = "SELECT * FROM history WHERE ReportDate = ?"
cm.Parameters.Add(d)
cm.CommandText = "SELECT * FROM history WHERE ReportDate = ?"
cm.Parameters.Add(d.toString("G"))
cm.CommandText = "SELECT * FROM history WHERE ReportDate = '?'"
cm.Parameters.Add(d.toString("G"))
cm.CommandText = "SELECT * FROM history WHERE ReportDate = '?'"
cm.Parameters.Add(d)
显然我在这里遗漏了一些东西,帮助?我知道d 与SQL Server 中的日期相同,特别是3/31/2011 12:00:00 AM。
【问题讨论】:
-
数据库中 ReportDate 的数据类型是什么?
-
在 SQL 中“玩”日期的最佳方式是将其格式化为
yyyy-mm-dd,这样可以避免日/月冲突。所以你可以做Dim ds As String = d.Year & "-" & d.Month & "-" & d.Day然后在 sql 中:"SELECT * FROM history WHERE ReportDate >= '" & ds & "' AND ReportDate < DATEADD(DAY, 1, '" & ds & "')" -
假设您的 sql 版本是 2008 或更高版本,除非您也需要时间,否则最好使用
Date数据类型。
标签: sql vb.net tsql ado.net oledb