-1

我有一些带有参数的简单 4 字段 SQL 查询,可以将一条记录插入到 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 语法错误。
至于我尝试插入的值:

ip = 任何可能生成的 IPv4 地址...
action = "SomeTestingString"
userid = 任何整数 < 999
时间 = DateTime.Now;

我已经尝试以一些不同的方式预先解析时间,但我的想法已经不多了。

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

我很感激任何建议。

4

1 回答 1

4

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

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

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

JET.4.0 的保留关键字列表

取而代之的是在 Access 2007 中,单词 ACTION 不再列在保留的单词之间.....

Access 2007 的保留关键字列表

于 2013-08-19T07:22:33.050 回答