我有插入Access数据库的代码。
这段代码通常有效,但我有一张表不起作用,我无法理解为什么。
这是我得到的例外:
Syntax error in INSERT INTO statement.
这是CODE:
if (connection == null) Connect();
command = new OleDbCommand(SQL);
command.Connection = connection;
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception ex) { }
finally { connection.Close(); }
这是SQL字符串:
Insert INTO TrackingsDateTimes (trackingDateTimeID, trackingID, dateTime, info) VALUES(1, 0, #02/05/2017 21:37:00#, '')
这是表TrackingsDateTimes:
trackingDateTimeID Number
trackingID Number
dateTime Date/Time
info Text
我缺少什么?
谢谢,
答案 0 :(得分:5)
将列命名为保留关键字并不是一个好主意。
如果您真的想使用该名称(我建议更改它),那么您需要围绕该名称的方括号
Insert INTO TrackingsDateTimes (trackingDateTimeID, trackingID, [dateTime], info) VALUES (.....)
答案 1 :(得分:0)
首先,您应该使用参数化查询,而不是插入内联变量。另一件事是dateTime
是MS Access中的保留字,可能需要使用反引号 [ReservedWord]
进行转义。
这应该可以为您提供重写查询的良好开端
// string qry = "Insert INTO TrackingsDateTimes ( trackingDateTimeID, trackingID, `dateTime`, info) VALUES(@trackingDateTimeID, #trackingID, @dateTime, @info)"
string qry = "Insert INTO TrackingsDateTimes ( trackingDateTimeID, trackingID, [dateTime], info) VALUES(@trackingDateTimeID, #trackingID, @dateTime, @info)"
if (connection == null) Connect();
command = new OleDbCommand(SQL);
command.Connection = connection;
command.Parameters.AddWithValue("@trackingDateTimeID", (int)1);
command.Parameters.AddWithValue("@trackingID", (int)0);
command.Parameters.AddWithValue("@dateTime", DateTime.Parse("2/05/2017 21:37:00");
command.Parameters.AddWithValue("@info", string.Empty);
答案 2 :(得分:-1)
您尝试插入被#包围而不是单引号的日期。
替换为
Insert INTO TrackingsDateTimes (trackingDateTimeID, trackingID, dateTime, info) VALUES(1, 0, '#02/05/2017 21:37:00#', '')