使用C#和Parameters.AddWithValue在Acces DB中插入数据

时间:2018-03-15 20:11:25

标签: c# ms-access parameters insert

我尝试使用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)

这是异常消息

This is the exception message

1 个答案:

答案 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?