String strSql = "insert into BaseData (Item," + dataGridView1.Columns[3].Name + "," + dataGridView1.Columns[4].Name + ") values ('" + row.Cells[0].Value + "','" + row.Cells[3].Value + "','" + row.Cells[4].Value + "')";
objCmd = new OleDbCommand(strSql, lConn);
objCmd.ExecuteNonQuery();
strSql = "select id from BaseData where Item = '" + row.Cells[0].Value + "' and " + dataGridView1.Columns[1].Name + " = '" + row.Cells[3].Value + "' And " + dataGridView1.Columns[2].Name + " = '" + row.Cells[4].Value + "'";
OleDbCommand command = new OleDbCommand(strSql, lConn);
OleDbDataReader reader = command.ExecuteReader();
String id = "";
while (reader.Read())
{
id = reader.GetString(0);
}
reader.Close();
strSql = "insert into tranjaction (Base_id,quentity,price,other) values ('" + id + "' , ' " + row.Cells[2].Value + "','" + row.Cells[1].Value + "')";
objCmd = new OleDbCommand(strSql, lConn);
objCmd.ExecuteNonQuery();
运行此操作时,Microsoft Visual Studio错误发生在第10行。(ExecuteReader)
错误就在这里。
“System.Data.OleDb.OleDbException”类型的未处理异常 发生在System.Data.dll
中附加信息:没有给出一个或多个所需的值 参数。
我该如何解决此错误?。
答案 0 :(得分:2)
您的字段名称是错误的(quentity?)还是因为您的参数字段不平衡。您正在插入4个字段,但您只提供3个值。使用参数代替,它会让您的生活更轻松。
尝试将其更改为:
strSql = "insert into tranjaction (Base_id,quentity,price,other) values (@id , @quentity, @price, @other)";
using (OleDbCommand cmd = new OleDbCommand(sqlSql, IConn)) {
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@quentity", row.Cells[2].Value);
cmd.Parameters.AddWithValue("@price", row.Cells[1].Value);
cmd.Parameters.AddWithValue("@other", other); // <- missing
cmd.ExecuteNonQuery();
}
答案 1 :(得分:1)
在这一行
strSql = "insert into tranjaction (Base_id,quentity,price,other) values ('" + id + "' , ' " + row.Cells[2].Value + "','" + row.Cells[1].Value + "')";
您正在插入4个值(Base_id,quentity,price,other),但您只插入3个值(id,row.Cells [2] .Value,row.Cells [1] .Value)。为other
提供值可以解决问题。
另一件可能导致此错误的事情(可能是您的情况)是,如果您拼错了其中一个列名称。由于您正在使用datagridview中的列名,并且您的一些书面列名似乎拼写错误,因此您应该仔细检查查询字符串中的拼写。
答案 2 :(得分:1)
当我在过去收到此错误时,一直是因为一个简单的拼写错误。就像其他人提到的一样,看起来你拼错了“数量”错误,这可能是问题的一部分。