我正在尝试更新表格中的某个项目并且它无效,我一直收到此错误"没有给出一个或多个必需参数的值"
我知道它不是我对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)
谢谢,所需的任何其他信息都让我知道。
编辑:我桌子的图片:
答案 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