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语句,没有错误 问题是什么 ?
答案 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建议的方式,但我从经验中知道您不必这样做。