在简单插入查询上接收SQL语法错误

时间:2013-08-19 07:17:15

标签: c# sql ms-access oledb

我有一些带有参数的简单4字段SQL-Query,可以将单个记录插入到ms-access数据库中的某些日志表中。

string SQL = "INSERT INTO logHistory (ip, action, userid, time)" +
      "VALUES (@val1, @val2, @val3, @time)";
using (OleDbCommand cmd = new new OleDbCommand(SQL, intranetDB))
{
    cmd.Parameters.AddWithValue("@val1", ip);
    cmd.Parameters.AddWithValue("@val2", action);
    cmd.Parameters.AddWithValue("@val3", userID);
    cmd.Parameters.AddWithValue("@time", 
        OleDbType.DBTimeStamp).Value = DateTime.Parse(time);
    cmd.ExecuteNonQuery();
}

表结构非常简单:

CREATE TABLE logHistory{
   id int auto_increment Primary Key,
   ip varchar(15),
   action varchar(50),
   userid int,
   time datetime
}

不幸的是,在执行上面的代码时,我收到SQL-Syntax错误 至于我试图插入的值:

  

ip =任何可能生成的IPv4地址...
  action =“SomeTestingString”
  userid =任何整数< 999个
  time = DateTime.Now;

我曾尝试以某种不同的方式事先解析时间,但我的想法已经不多了。

string time = DateTime.Now.ToString();
string time = DateTime.Now.ToString("yyyyMMdd hh:mm:ss");
string time = DateTime.Now.ToShortDateString();

我感谢任何建议。

1 个答案:

答案 0 :(得分:4)

如果这是MS Access数据库,则单词TIME是保留关键字。您需要在其周围使用方括号来在查询中使用。看起来更好,也保留了ACTION这个词......

string SQL = "INSERT INTO logHistory (ip, [action], userid, [time])" +
                  "VALUES (@val1, @val2, @val3, @time)";

如果有可能,我强烈建议更改这些名称,因为每次点击此表时都会出现此问题。

List of reserved keywords for JET.4.0

而在Access 2007中,在保留的那些之间不再列出ACTION一词......

List of reserved keywords for Access 2007