我的代码如下。我有一个方法,我传入三个参数,然后写入MS Access数据库表。但是,我不断收到语法错误消息。谁能告诉我为什么?我从网上得到了这个例子。
private static void insertRecord(string day, int hour, int loadKW)
{
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\LoadForecastDB.accdb";
OleDbConnection conn = new OleDbConnection(connString);
string ins = @"INSERT INTO Forecasts (Day, Hour, Load) VALUES (?,?,?)";
OleDbCommand cmd = new OleDbCommand(ins, conn);
cmd.Parameters.Add("@day", OleDbType.VarChar).Value = day;
cmd.Parameters.Add("@hour", OleDbType.Integer).Value = hour;
cmd.Parameters.Add("@load", OleDbType.Integer).Value = loadKW;
conn.Open();
try
{
int count = cmd.ExecuteNonQuery();
}
catch (OleDbException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
conn.Close();
}
}
答案 0 :(得分:7)
我认为这可能是因为您的列名称(日和小时)也是关键字。也许你可以把'(倒置的单引号)放在它们周围(在MySQL中有效,不知道MS Access)
答案 1 :(得分:2)
尝试更改
string ins = @"INSERT INTO Forecasts (Day, Hour, Load) VALUES (?,?,?)";
要:
string ins = @"INSERT INTO Forecasts ([Day], [Hour], [Load]) VALUES (@day, @hour, @load)";
答案 2 :(得分:0)
另一种选择可能是使用数字引用绑定变量:
cmd.Parameters.Add(1, OleDbType.VarChar).Value = day;
cmd.Parameters.Add(2, OleDbType.Integer).Value = hour;
cmd.Parameters.Add(3, OleDbType.Integer).Value = loadKW;
注意我不知道C#,但类似的方法适用于Java和JDBC。