这个OLEDB插入命令有什么错误?

时间:2013-11-14 14:46:08

标签: c# oledbcommand

  public void log(int materialId,string materialName, string action, string description, string datetime, double amount,string unit)
        {
            OleDbCommand insertIntoLog = new OleDbCommand();
            insertIntoLog.CommandText = "INSERT INTO NCCI_eventslog (materialId,materialName,action,description,date_time,amount,unit) Values (@materialId,@materialName,@action,@description,@date_time,@amount,@unit)";
            insertIntoLog.Connection = database;
            insertIntoLog.Parameters.AddWithValue("@materialId", materialId);
            insertIntoLog.Parameters.AddWithValue("@materialName", materialName);
            insertIntoLog.Parameters.AddWithValue("@action", action);
            insertIntoLog.Parameters.AddWithValue("@description", description);
            insertIntoLog.Parameters.AddWithValue("@date_time", datetime);
            insertIntoLog.Parameters.AddWithValue("@amount", amount);
            insertIntoLog.Parameters.AddWithValue("@unit", unit);

            if (database.State == ConnectionState.Open)
            {
                database.Close();
            }
            database.Open();
            insertIntoLog.ExecuteScalar();
        }

错误是:插入语句中的语法错误,我在Access Query SQL中复制了insert语句,没有错误 问题是什么 ?

4 个答案:

答案 0 :(得分:1)

您需要使用

insertIntoLog.ExecuteNonQuery();

而不是

insertIntoLog.ExecuteScalar();

答案 1 :(得分:1)

OLEDB提供程序不支持文本命令的命名参数 - 对每个参数使用?,然后按顺序将 添加到命令 :< / p>

insertIntoLog.CommandText = "INSERT INTO NCCI_eventslog " + 
    "(materialId,materialName,action,description,date_time,amount,unit) " + 
    "Values (?,?,?,?,?,?,?)";

答案 2 :(得分:0)

检查您的日期时间字段可能是您感觉到的问题 首先手动传递datetime值'01 / jan / 2013'并检查

答案 3 :(得分:0)

我可能是错的,所以我可以随意向我投票,但因为我认为到目前为止给出的任何“答案”都不正确,我想我不妨把它扔到那里,即使这样问题就像现在一岁。

“单位”可能是保留关键字,或其他一个可能是关键字。所以我建议把它放在方括号中。所以你的INSERT语句看起来像这样:

insertIntoLog.CommandText = "INSERT INTO NCCI_eventslog (materialId,materialName,action,description,date_time,amount,[unit]) Values (@materialId,@materialName,@action,@description,@date_time,@amount,@unit)";

如果这不起作用,请尝试将其他的放在括号中,或者甚至是所有这些中,我不认为将它们全部放在一边会伤害它。

我想您也可以尝试将格式更改为D Stanley建议的方式,但我从经验中知道您不必这样做。