Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将DateTime与Microsoft SQL和Visual C进行比较_C#_Sql_Datetime_Oledb - Fatal编程技术网

C# 将DateTime与Microsoft SQL和Visual C进行比较

C# 将DateTime与Microsoft SQL和Visual C进行比较,c#,sql,datetime,oledb,C#,Sql,Datetime,Oledb,我试图将日期时间与给定日期进行比较 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

我试图将日期时间与给定日期进行比较

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");
}
。但是如果我尝试将currentTime替换为一个特定的值,请参见我所做的尝试,它会引发System.Data.OleDb.OledBeException或SQL语法错误。我现在有点困惑,因为DATE返回的值的格式与我尝试的格式完全相同。有人知道我错过了什么吗

致意

Kruspe使用以下格式:

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());

Msdn提供了有关iso日期格式使用参数的具体示例,请参阅我对这个问题的回答:您甚至可以说您的问题是重复的日期没有格式。使用参数并传递日期,它就会工作。您的代码正在传递文本。非常感谢。很好,我不需要打开和关闭connection@kruspe如果手动关闭连接,并且在此之前代码出现异常,则连接不会关闭。通过使用“using”,您可以确定连接已关闭happens@Kruspe不要添加代码来打开/关闭连接。.Fill方法已经为您处理了这个问题,using块在确保连接将关闭方面比您的旧代码做得更好。但是,您编写它的方式,它抛出了一个错误,说连接状态:closed
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());