将C#中的DateTime与Access中的DateTime进行比较时出现语法错误

时间:2012-11-15 15:01:49

标签: c# sql datetime

我已经尝试了几种方法来完成这项工作,但我仍然遇到同样的错误。我正在尝试删除tblList中的一行,其中列lisDate(其类型为DateTime)等于日期(没有时间)。 假设日期是2012年7月14日(2012年7月14日),dbConnection是一个开放的OleDbConnection:

string dt = string.Format("{0}/{1}/{2}", 14, 07, 2012);
OleDbCommand command = new OleDbCommand("DELETE FROM tblList WHERE CAST(lisDate as DATE) = #" + dt + "#", dbConnection);
command.ExecuteNonQuery();

这会出现以下错误:

  

查询表达式'CAST(lisDate as DATE)中的语法错误(缺少运算符)=#14/07/2012#'。

这可能是一个愚蠢的问题,因为我以前从未比较过DateTime值,但我将非常感谢你的帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

我没有Access方便,但在SQL代码中你遇到错误。我会尝试这样的查询字符串:

"delete from tbllist where
cast(lisDate as varchar(9)) = '" +dt +"'"

实际上,更好的是:

"delete from tbllist
where datepart(mm,lisDate) = '07' and
datepart(dd,lisDate) = '14' and
datepart(yy,lisDate = '2012'  -- obviously cancatinating in your values

答案 1 :(得分:0)

尝试使用一个参数,该参数将提供隐式日期转换:

        string dt = string.Format("{0}/{1}/{2}", 14, 07, 2012);
        OleDbCommand command = new OleDbCommand("DELETE FROM tblList WHERE lisDate = [pDate]", dbConnection);
        OleDbParameter dateParm = command.Parameters.Add("pDate", OleDbType.Date);
        dateParm.Value = dt;
        command.ExecuteNonQuery();

<强> REVISION:

更完整的解决方案包含了Chris Dunaway对支持日期和时间的精辟评论:

    void DeleteByDate()
    {
        try
        {
            using (OleDbConnection dbConnection = new OleDbConnection())
            {
                dbConnection.ConnectionString = myConnectionString;
                dbConnection.Open();
                string dt = string.Format("{0}/{1}/{2}", 14, 07, 2012);
                using (OleDbCommand command = new OleDbCommand("DELETE FROM tblList WHERE lisDate = [pDate]", dbConnection))
                {
                    OleDbParameter dateParm = command.Parameters.Add("pDate", OleDbType.DBTimeStamp);
                    dateParm.Value = dt;
                    command.ExecuteNonQuery();
                }
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }