Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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与Access中的DateTime进行比较时出现语法错误_C#_Sql_Datetime - Fatal编程技术网

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

将C#中的DateTime与Access中的DateTime进行比较时出现语法错误,c#,sql,datetime,C#,Sql,Datetime,我已经尝试了几种方法来实现这一点,但我总是遇到同样的错误。我试图删除tblList中的一行,其中lisDate列(其类型为DateTime)等于一个日期(不含时间)。 假设日期为2012年7月14日(2012年7月14日),且dbConnection为开放式OLEDB连接: string dt = string.Format("{0}/{1}/{2}", 14, 07, 2012); OleDbCommand command = new OleDbCommand("DELETE FROM tbl

我已经尝试了几种方法来实现这一点,但我总是遇到同样的错误。我试图删除tblList中的一行,其中lisDate列(其类型为DateTime)等于一个日期(不含时间)。 假设日期为2012年7月14日(2012年7月14日),且dbConnection为开放式OLEDB连接:

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#”中出现语法错误(缺少运算符)


这可能是一个愚蠢的问题,因为我以前从未比较过日期时间值,但我会感谢您的帮助。谢谢

我手头没有访问权限,但在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

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

        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();
修订版:

一个更完整的解决方案结合了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);
        }
    }

您正在使用什么rdbms?sql server 2005、sql server 2008、sql server 2012、mysql、oracle、db2?什么d您是否看到了执行
强制转换(lisDate为DATE)
时所产生的结果?可能该输出与
dt
中的内容不匹配。如果是这样,那么您将需要格式化您的
dt
以匹配相同的日期格式。如果出现语法错误,您需要找出正确的语法,在您担心如何从.NET
DateTime
引用生成synax之前,部分问题在于您将DateTime数据视为字符串,这正是造成问题的原因。如果使用DateTime变量和DateTime参数,则不会出现此问题。这将如何解决OP问题?这个家伙需要用WHERE子句从
tblList
中删除一些内容。你的WHERE子句在哪里?答案在我完成之前就发送了。说错了,Bollois代码使用带有日期类型参数的字符串。也许DateTime变量更合适?也许,但示例显示了一个日期值,我认为隐式转换可以正确处理它。但是假设是不知道的,所以我会做一个测试,然后再给你回复。谢谢Chris,看看修改后的解决方案。这看起来肯定更好,但有一个奇怪的错误:一个或多个必需的参数没有给出值。Hmmm。我在Access中测试了此解决方案。您的表是否包含名为“lisDate”的字段?