数据库错误:“没有为一个或多个必需参数提供值。”

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 SQL'没有为一个或多个必需参数提供值'但字段存在

查询带有标题的制表符分隔的文本文件时出现 VBA 错误 - “没有为一个或多个必需参数提供值”

为啥我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?

Visual basic System.Data.OleDb.OleDbException:“没有为一个或多个必需参数提供值。”