在Access中没有给出一个或多个必需参数的值

时间:2015-07-29 12:11:07

标签: vb.net

我正在尝试更新表格中的某个项目并且它无效,我一直收到此错误"没有给出一个或多个必需参数的值"

我知道它不是我对Access MDB数据库的连接设置,因为我已经能够与它进行通信。这是我的功能:

Public Sub UpdateDB(ByVal dbTable As String, ByVal updateColumn As String, ByVal updateItem As String, ByVal keyCol As String, ByVal keyItem As String)
    'Update items in DB
    aCommand.CommandType = CommandType.Text
    aCommand.CommandText = String.Format("UPDATE {0} SET {1} = '{2}' WHERE {3} = {4}", dbTable, updateColumn, updateItem, keyCol, keyItem)
    aCommand.Connection = aConnection
    aConnection.Open()
    'MsgBox(aCommand.CommandText)
    Try
        aCommand.ExecuteNonQuery()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

    aConnection.Close()
End Sub

我的函数调用:VMD.UpdateDB(" Bushing","长度"," 0.98123"," FileName",& #34; Bushing1&#34)

谢谢,所需的任何其他信息都让我知道。

编辑:我桌子的图片:

enter image description here

3 个答案:

答案 0 :(得分:3)

您的命令文本如下

 String.Format("UPDATE {0} SET {1} = '{2}' WHERE {3} = {4}", ....

并将通过格式化更改为

UPDATE Bushing SET Length = '0.98123' WHERE FileName = Bushing1

请注意Bushing1之间的单引号之间的关系。 Access尝试将此字符串解释为列名,但没有具有该名称的列,因此它应该是一个参数,但没有参数。它放弃并引发错误消息。 您可以轻松修复它,在'{4}'

周围加上引号

但这只会隐藏你在地毯下的问题,因为如果你有一个包含单引号的参数,你将再次收到错误信息。 我真的建议你使用参数化查询方法而不是这种形式的字符串连接

答案 1 :(得分:2)

您的查询无法正常工作,导致您在WHERE条件下没有单独引用值。这样您的查询就像

UPDATE Bushing SET Length = 0.98123 WHERE FileName = Bushing1

您的查询传感器看起来像

string query = String.Format("UPDATE {0} SET {1} = '{2}' WHERE {3} = '{4}'", dbTable, updateColumn, updateItem, keyCol, keyItem);

这将导致

UPDATE Bushing SET Length = '0.98123' WHERE FileName = 'Bushing1'

答案 2 :(得分:2)

长度是一种访问功能。你不能发送"长度"引用列名称。您需要做的是用方括号括起列名。 示例:

  "[Length]" // Instead of "Length"

您的代码示例如下:

 Public Sub UpdateDB(ByVal dbTable As String, ByVal updateColumn As String, ByVal updateItem As String, ByVal keyCol As String, ByVal keyItem As String)
'Update items in DB
aCommand.CommandType = CommandType.Text
aCommand.CommandText = String.Format("UPDATE {0} SET {1} = '{2}' WHERE [{3}] = {4}", dbTable, updateColumn, updateItem, keyCol, keyItem)
aCommand.Connection = aConnection
aConnection.Open()
'MsgBox(aCommand.CommandText)
Try
    aCommand.ExecuteNonQuery()
Catch ex As Exception
    MessageBox.Show(ex.Message)
End Try

aConnection.Close()
End Sub