我尝试使用Parameters.AddWithValue在Acces数据库中插入一些数据 但结果是插入子句
出错private const string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data source= C:\Users\andres\" +
@"Documents\synchro.accdb";
System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection(conString);
OleDbCommand cmd;
public void setData(string temperature, string humidity,int month,int day,int year,string session)
{
//SQL STMT
const string sql = "INSERT INTO termohigrometer(temperature,humidity,month,day,year,session) VALUES(@TEMPERATURE,@HUMIDITY,@MONTH,@DAY,@YEAR,@SESSION)";
cmd = new OleDbCommand(sql, conn);
Console.Write("temperatura "+temperature);
cmd.Parameters.AddWithValue("@TEMPERATURE", temperature);
cmd.Parameters.AddWithValue("@HUMIDITY", humidity);
cmd.Parameters.AddWithValue("@MONTH", month);
cmd.Parameters.AddWithValue("@DAY", day);
cmd.Parameters.AddWithValue("@YEAR", year);
cmd.Parameters.AddWithValue("@SESSION", session);
Console.Write("query " +cmd.CommandText );
try
{
conn.Open();
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show(@"Successfully Inserted");
}
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
conn.Close();
}
}
这是cmd.CommandText
的结果INSERT INTO termohigrometer(temperature,humidity,month,day,year,session)
VALUES(@TEMPERATURE,@HUMIDITY,@MONTH,@DAY,@YEAR,@SESSION)
这是异常消息
答案 0 :(得分:3)
这些词月,日,年,会话是MS-Access的保留字。如果您有包含这些名称的字段,我强烈建议您将它们更改为不同的名称。否则,您需要在它们周围放置方括号以避免混淆Jet Sql Engine。
const string sql = @"INSERT INTO termohigrometer
(temperature,humidity,[month],[day],[year],[session])
VALUES(@TEMPERATURE,@HUMIDITY,@MONTH,@DAY,@YEAR,@SESSION)";
还要考虑使用更精确的Add方法替换AddWithValue方法,并使用参数的数据类型
cmd.Parameters.Add("@TEMPERATURE", OleDbType.VarWChar).Value = temperature;
....
阅读这篇知名帖子,了解这个内部的危险,方便'方法。
Can we stop using AddWithValue already?