Использование оператора SELECT для возврата строки, в которой столбец DateTime = переменная типа Date? - PullRequest
0 голосов
/ 20 июня 2011

Я использую 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-сервере, в частности 3/31/2011 12:00:00 AM.

Ответы [ 4 ]

0 голосов
/ 06 января 2013

Ваш запрос, как указано, требует "дать мне все записи ровно в полночь этой даты".

Что-то вроде этого должно работать:

cm.CommandText = "DECLARE @MyDate DATETIME; SET @MyDate = ?; SELECT * FROM history WHERE ReportDate >= @MyDate AND ReportDate < DateAdd(day,1,@MyDate);"
cm.Parameters.Add(d)

Это вернет все записи в или после полуночи даты и до полуночи следующего дня.

0 голосов
/ 20 июня 2011

Попробуйте использовать другой формат даты в вашем SQL, например:

Cm.CommandText = "SELECT * FROM history WHERE ReportDate = '" & d.toString("mm/dd/yyyy") & "'"
0 голосов
/ 21 июня 2011

Вы хотели создать переменную даты (d) за день до значения rptDate (т. Е. С нулевым днем ​​(1-1)) ?

Это (ниже) даст вам вашу запись (при условии, что запись не имеет временной части).

SELECT * FROM history WHERE ReportDate = '" & d.toString("dd-MMM-yyyy") & "'"

(Явный формат даты однозначен, тогда как «G» - нет.)

... или ...

cm.CommandText = "SELECT * FROM history WHERE ReportDate = @date"
cm.Parameters.AddWithValue("@date", d)  
0 голосов
/ 20 июня 2011

Запись

cm.CommandText = "SELECT * FROM history WHERE ReportDate = ?"
cm.Parameters.AddWithValue("ParamName", d)

В зависимости от вашего провайдера, вам может понадобиться использовать именованные параметры:

cm.CommandText = "SELECT * FROM history WHERE ReportDate = @date"
cm.Parameters.AddWithValue("date", d)
...