【问题标题】:Recieving SQL Syntax error on simple insert query在简单插入查询中收到 SQL 语法错误
【发布时间】:2013-08-19 07:17:14
【问题描述】:

我有一些带有参数的简单 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"
用户 ID = 任何整数 时间 = DateTime.Now;

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

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

感谢任何建议。

【问题讨论】:

  • Unfortunately i get SQL-Syntax error when executing above code. 它说什么?
  • 'INSERT INTO-Statment 中的语法错误'。这被 C# 运行时捕获到 sql-Exception,我无法获得更深入的信息 :(,详细信息:Microsoft JET Database Engine at Logger ln.55(即 cmd.ExecuteNonQuery();)
  • 不确定,但第一行可能缺少空格:string SQL = "INSERT INTO logHistory (ip, action, userid, time) " +

标签: c# sql ms-access oledb


【解决方案1】:

如果这是一个 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

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多