C#插入访问投掷异常

时间:2017-05-02 19:04:14

标签: c# sql database ms-access oledb

我有插入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

我缺少什么?

谢谢,

3 个答案:

答案 0 :(得分:5)

将列命名为保留关键字并不是一个好主意。

DATETIME is reserved

如果您真的想使用该名称(我建议更改它),那么您需要围绕该名称的方括号

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#', '')

编辑:我错了,史蒂夫是对的。