Oledb和DATETIME的问题

本文关键字:问题 DATETIME Oledb | 更新日期: 2023-09-27 18:17:15

我需要一些帮助。这是我的代码:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM Request " + "WHERE _Date >= " + "@Dt", con);
cmd.Parameters.Add("@Dt", OleDbType.Date);
cmd.Parameters["@Dt"].Value = DateTime.Now;
using (IDataReader reader = cmd.ExecuteReader())
{ }

但是它返回一个异常:

"查询表达式'_Date>= @Dt'语法错误。"OleDb异常

和以下代码:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM Request " + "WHERE _Date > " + "'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +"'", con);
using (IDataReader reader = cmd.ExecuteReader())
{  }
返回

"查询表达式'_Date> '2014-08-08 10:55:04语法错误"。"

怎么了?

Oledb和DATETIME的问题

尽管有下划线,但名称Date是保留字,因此您可能应该将字段名称放在括号中:

WHERE [_Date] > @Dt

最好避免保留字,并对字段名使用更好的描述,如RequestDate。我还会避免以下划线开头的列名

试一下

OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Request] WHERE [_Date] >= @Date", con);
cmd.Parameters.AddWithValue("@Date", DateTime.Now);

使用占位符作为参数,而不是通过将SQL连接在一起将SQL暴露给注入。

OleDbCommand cmd = new OleDbCommand("SELECT * FROM Request WHERE _Date > ?", con);
cmd.Parameters.AddWithValue("@Date", DateTime.Now);