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

本文关键字:SQL 语法 错误 简单 插入 查询 | 更新日期: 2023-09-27 18:28:13

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

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
time=DateTime.Now;

我试着用一些不同的方式预先解析时间,但我的想法已经用完了。

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

我感谢你的建议。

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

如果这是一个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 的保留关键字列表