数据库错误:“没有为一个或多个必需参数提供值。”
Posted
技术标签:
【中文标题】数据库错误:“没有为一个或多个必需参数提供值。”【英文标题】:a database error :"No value given for one or more required parameters." 【发布时间】:2013-06-02 05:48:44 【问题描述】:我有一个数据网格,我应该将其列值插入到 access 数据库中,但 command.ExecuteNonQuery();
有问题
我的项目没有完成只是因为这个错误。这是我的代码:
for (int i = 0; i < (dataGridFactorRent.Rows.Count) - 1; i++)
string query =
@"INSERT INTO tbl_RentFactor([ID],DateNow,customerName, objectName,
objectNumber,unitCost,objectCost,paidMoney,restOfMonyy,customerID,DateBack)
VALUES ("+ID+",'" + lbldate.Text + "','" + cmdCustomName.Text + "'," +
dataGridFactorRent.Rows[i].Cells[1].Value + ",
" + dataGridFactorRent.Rows[i].Cells[3].Value + ",
" + dataGridFactorRent.Rows[i].Cells[4].Value + ",
" + dataGridFactorRent.Rows[i].Cells[5].Value + ",
'" + txtPaid.Text + "','" + lblRemained.Text + "',
"+customerID+",'"+lbldate.Text+"')";
con.Open();
command.CommandText =query;
command.ExecuteNonQuery();
con.Close();
【问题讨论】:
在ExecuteNonQuery
之前调试并设置断点并检查query
。手动在数据库上测试它。避免这些错误,您可以使用参数。
【参考方案1】:
正如上述 cmets 中的建议,您应该首先更改您的代码以使用 参数化查询。这将减轻您对值进行分隔的需要,并且还将使您的代码更安全。此外,您应该利用using
语句让.NET 更好地管理资源。
进行这些更改后,您的代码将看起来更像这样:
string query =
@"INSERT INTO tbl_RentFactor([ID],DateNow,customerName, objectName,
objectNumber,unitCost,objectCost,paidMoney,restOfMonyy,customerID,DateBack)
VALUES (?,?,?,?,?,?,?,?,?,?,?)";
con.Open();
for (int i = 0; i < (dataGridFactorRent.Rows.Count) - 1; i++)
using (var command = new OleDbCommand(query, con));
command.Parameters.AddWithValue("?", ID);
command.Parameters.AddWithValue("?", lbldate.Text);
command.Parameters.AddWithValue("?", cmdCustomName.Text);
command.Parameters.AddWithValue("?", dataGridFactorRent.Rows[i].Cells[1].Value);
command.Parameters.AddWithValue("?", dataGridFactorRent.Rows[i].Cells[3].Value);
command.Parameters.AddWithValue("?", dataGridFactorRent.Rows[i].Cells[4].Value);
command.Parameters.AddWithValue("?", dataGridFactorRent.Rows[i].Cells[5].Value);
command.Parameters.AddWithValue("?", txtPaid.Text);
command.Parameters.AddWithValue("?", lblRemained.Text);
command.Parameters.AddWithValue("?", customerID);
command.Parameters.AddWithValue("?", lbldate.Text);
command.ExecuteNonQuery();
con.Close();
如果在进行这些修改后仍然收到错误,请仔细检查 INSERT 语句中的字段名称。
【讨论】:
【参考方案2】:表示在表中没有找到一列,(所以 Access 认为它是一个参数)。通常你拼错了一些东西。似乎“restOfMonyy”应该是“restOfMoney”。如果没有,请调试应用程序并构建确切的字符串并使用它进行查询,看看会发生什么。
【讨论】:
以上是关于数据库错误:“没有为一个或多个必需参数提供值。”的主要内容,如果未能解决你的问题,请参考以下文章
“INSERT INTO 语句中的语法错误”和“没有为一个或多个必需参数提供值”
错误:来自 ASP.NET 的 UPDATE 查询中的“没有为一个或多个必需参数提供值”
查询带有标题的制表符分隔的文本文件时出现 VBA 错误 - “没有为一个或多个必需参数提供值”
为啥我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?
Visual basic System.Data.OleDb.OleDbException:“没有为一个或多个必需参数提供值。”