【问题标题】:c# access database programc# access数据库程序
【发布时间】:2011-10-26 02:24:11
【问题描述】:
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();

当我运行它时,第 10 行出现 Microsoft Visual Studio 错误。(ExecuteReader)

错误就在这里。

“System.Data.OleDb.OleDbException”类型的未处理异常 发生在 System.Data.dll

附加信息:没有给出一个或多个必需的值 参数。

我该如何解决这个错误?

【问题讨论】:

  • 你有没有检查过这行结尾是什么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 + "'";是所有字段(列)文本,因为根据这个,它们应该是。

标签: c# ms-access dao


【解决方案1】:

您的字段名称错误(数量?)或者是因为您的参数字段不平衡。您正在插入 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();
}

【讨论】:

  • 第 6 行发生错误,而不是第 15 行。
  • @bTagTiger 这是你应该在问题中提到的。还有哪一行是第 6 行
  • @bTagTiger 我猜第 6 行指的是“@other”——我不知道 other 是什么,但你的查询中有它,所以我假设你知道它是什么.如果不需要,则删除该行,但您也必须将其从 SQL 字符串中删除。
【解决方案2】:

当我过去收到此错误时,总是因为一个简单的错字。就像其他人提到的那样,您似乎拼写了“数量”错误,这可能是问题的一部分。

【讨论】:

  • 我在 Microsoft Access 中使用 strSql 的内容进行了查询。并没有发现任何问题。查询效果很好。
  • 我没有时间。请尽快帮助我。
【解决方案3】:

在这一行

strSql = "insert into tranjaction (Base_id,quentity,price,other) values ('" + id + "' , ' " + row.Cells[2].Value + "','" + row.Cells[1].Value + "')";

您正在插入 4 个值(Base_id、数量、价格、其他),但您只插入 3 个值(id、row.Cells[2].Value、row.Cells[1].Value)。为other 赋值应该可以解决问题。

导致此错误的另一件事(可能是您的情况)是您是否错误地拼写了其中一个列名。由于您使用的是 datagridview 中的列名,并且您的一些书面列名似乎拼写错误,您应该仔细检查查询字符串中的拼写。

【讨论】:

  • @bTagTiger 你说错误发生在第 6 行,你应该在运行时检查"select id from BaseData where... 正上方的查询字符串,并确保所有字段名称/值都拼写正确
  • 嗯,我已经在运行时检查了strSql,每个值都是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2011-12-19
相关资源
最近更新 更多