使用c#进行MS Access查询

本文关键字:Access 查询 MS 进行 使用 | 更新日期: 2023-09-27 18:17:31

我正在通过c#执行MS Access查询。下面是查询

String SelWHQuery = "SELECT  DateDiff('n',INTime,OUTTime)''60 & '.' & Format(DateDiff('n',[INTime],[OUTTime]) Mod 60,'00') AS Workedhours" + 
    "' WHERE EMPID = '" + Eno + 
    "'AND RDate=# "+ DateTime.Now.Date.ToString("yy-MM-dd") + 
    "# FROM  INOUTPunching";

给出如下错误

{" SELECT语句包含一个保留字或参数名,该参数名拼写错误或缺失,或标点符号错误。"}

I need to know:

  1. 为什么不工作?
  2. 有没有更简单的方法?

使用c#进行MS Access查询

应将FROM子句置于WHERE子句之前。这就是你的问题所在。你有一个额外的单引号应该被删除。这是你应该写的查询:

String SelWHQuery = "SELECT  DateDiff('n',INTime,OUTTime)''60 & '.' & Format(DateDiff('n',[INTime],[OUTTime]) Mod 60,'00') AS Workedhours FROM  INOUTPunching " + 
" WHERE EMPID = '" + Eno + 
"'AND RDate=# "+ DateTime.Now.Date.ToString("yy-MM-dd") + "#";

关于一个更简单的方法:不,这是最简单的方法,但它容易受到SQL注入攻击。将其替换为一个参数化查询(假设您有一个OldDbCommand名称cmd):

String SelWHQuery = "SELECT  DateDiff('n',INTime,OUTTime)''60 & '.' & Format(DateDiff('n',[INTime],[OUTTime]) Mod 60,'00') AS Workedhours FROM  INOUTPunching " + 
" WHERE EMPID = @EmpId AND RDate=# "+ DateTime.Now.Date.ToString("yy-MM-dd") + "#";
cmd.CommandType = CommandType.Text;
cmd.CommandText = SelWHQuery;
cmd.Parameters.AddWithValue("@EmpId", Eno);