我正在尝试将DateTime与给定日期进行比较。
string conString = @"Provider=Microsoft.JET.OLEDB.4.0;" + @"data
source=C:\\myDB.mdb";
OleDbConnection conn = new OleDbConnection(conString);
conn.Open();
DataSet ds = new DataSet();
String q = "SELECT * FROM Booking WHERE CheckIn < DATE()";
//String q = "SELECT * FROM Booking WHERE CheckIn < '01.01.2020'";
//String q = "SELECT * FROM Booking WHERE CheckIn < 01.01.2020";
//String q = "SELECT * FROM Booking WHERE CheckIn < '01.01.2020 00:00:00'";
//String q = "SELECT * FROM Booking WHERE CheckIn < 01.01.2020 00:00:00";
OleDbDataAdapter adapter = new OleDbDataAdapter(q, conn);
Console.WriteLine(q);
adapter.Fill(ds);
conn.Close();
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)
{
MessageBox.Show(dt.Rows[0][0].ToString());
}
else
{
MessageBox.Show("0 found");
}
代码显示了如何将其与当前时间进行比较。工作正常,结果为
01.12.2018 00:00:00
。但是,如果我尝试将currentTime替换为特定值(请参阅我所尝试的内容),则会抛出System.Data.OleDb.OleDbException或SQL语法错误。我现在有点困惑,因为DATE()返回的值与我尝试过的格式完全相同。有人知道我在想什么吗?
最诚挚的问候
克鲁斯佩
答案 0 :(得分:1)
使用此格式:
yyyy-MM-dd
这被称为ISO-8601标准日期格式,在输入日期文字时,几乎任何语言都应始终使用它:
2020-01-01
虽然我在这里,但是在引发异常的情况下,发布的代码有可能泄漏连接对象。更好的做法是将连接包含在using
块中。顺便说一句,如果对此使用参数化查询,则格式突然变得无关紧要。
string dbPath = @"C:\myDB.mdb";
string conString = $"Provider=Microsoft.JET.OLEDB.4.0;data source={dbPath}";
string q = "SELECT * FROM Booking WHERE CheckIn < ?";
Object result = null;
using (var conn = new OleDbConnection(conString))
using (var cmd = new OleDbCommand(q, conn))
{
cmd.Parameters.Add("Date", OleDbType.Date).Value = new DateTime(2020, 1, 1);
Console.WriteLine(q);
result = cmd.ExecuteScalar();
}
if (result == null || result == DBNull.Value)
{
result = "0 found";
}
MessageBox.Show(result.ToString());