我有一些带有参数的简单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();
我感谢任何建议。
答案 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一词......