我已经尝试了几种方法来完成这项工作,但我仍然遇到同样的错误。我正在尝试删除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值,但我将非常感谢你的帮助。谢谢!
答案 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);
}
}