VB.NET更新方法
大家好。我想就更新数据库中特定记录的代码寻求帮助。我的后端是Microsoft Access,前端是Visual Basic。它给我一个错误“没有为一个或多个必需参数提供值”。此外,我还收到一个关于“对象引用未设置为对象实例”的问题 这是我的密码。谢谢:)VB.NET更新方法,vb.net,Vb.net,大家好。我想就更新数据库中特定记录的代码寻求帮助。我的后端是Microsoft Access,前端是Visual Basic。它给我一个错误“没有为一个或多个必需参数提供值”。此外,我还收到一个关于“对象引用未设置为对象实例”的问题 这是我的密码。谢谢:) accessConnection是全局(连接对象)变量吗?您必须已在该过程上创建了该对象的另一个实例 还有一件事,clientID也可以参数化。然后加上这一行 accessCommand.Parameters.AddWithValue("@c
accessConnection
是全局(连接对象)变量吗?您必须已在该过程上创建了该对象的另一个实例
还有一件事,clientID
也可以参数化。然后加上这一行
accessCommand.Parameters.AddWithValue("@clientID", selectedClient)
更新1
Private Sub UpdateClient()
Dim recordsAffected As Integer = 0
Dim sqlUpdateClient As String = "UPDATE tblClient " & _
"SET clientCompany = ?, " & _
" clientStreetAddress = ?, " & _
" clientCity = ?, " & _
" clientContactPerson = ?, " & _
" clientContactNumber = ?, " & _
" clientEmail = ?, " & _
" clientMobileNumber = ? " & _
"WHERE clientID = ?"
Using accessConnection As New OleDbConnection("connectionStringHere")
Using accessCommand As New OleDbCommand()
With accessCommand
.Connection = accessConnection
.CommandType = CommandType.Text
.CommandText = sqlUpdateClient
.Parameters.AddWithValue("clientCompany", txtClientCompany.Text)
.Parameters.AddWithValue("clientStreetAddress", txtClientStreetAddress.Text)
.Parameters.AddWithValue("clientCity", txtClientCity.Text)
.Parameters.AddWithValue("clientContactPerson", txtClientContactPerson.Text)
.Parameters.AddWithValue("clientContactNumber", txtClientPhoneNumber.Text)
.Parameters.AddWithValue("clientEmail", txtClientEmailAddress.Text)
.Parameters.AddWithValue("clientMobileNumber", txtClientMobileNumber.Text)
.Parameters.AddWithValue("clientID", selectedClient)
End With
Try
accessConnection.Open()
recordsAffected = accessCommand.ExecuteNonQuery()
Catch ex As OleDBException
lblError.Text = ex.Message.ToString()
Finally
accessConnection.Close()
End Try
If recordsAffected = 0 Then
MsgBox("Record updated failed!", MsgBoxStyle.Exclamation, "Project Analysis System")
Else
MsgBox("Record updated successfully!", MsgBoxStyle.Information, "Project Analysis System")
PopulateClientList()
End If
End Using
End Using
End Sub
在哪里定义了
accessConnection
和selectedClient
,表tblClient
的定义是什么?您在哪里收到“对象引用未设置为对象实例”?另外,为什么不将selectedClient指定为参数@clientID?@vane:accessConnection包含我的连接字符串,而selectedClient来自listview,在listview中,当我从listview中选择一个项目时,它返回一个整数。@astander:当我试图创建一个参数“clientID”时,它给我的错误是“没有为一个或多个必需参数提供值“。有一次,当我尝试将SQL字符串与一个变量连接起来时,它起了作用,但在我的其他形式中,考虑到变量和名称的所有替换。我不相信Access支持命名参数,是吗?请在更新字符串中使用问号而不是命名参数,然后确保以正确的顺序将参数添加到accessCommand对象。@JohnWoo clientID不需要参数化;这是最佳实践,但在不将其作为参数并像他所做的那样连接它的情况下,它会起作用。当您提供参数和其他值时,有些值并没有,这很奇怪。无论如何,这是用户的选择。@JohnWoo我完全同意,并认为它也应该参数化,我只是不希望错误信息四处传播,因为你说它必须参数化,而这句话是错误的。@JohnWoo:是的,accessConnection是我的OleDbConnection。但我刚刚把这行代码放在了我的全局部分。我不知道是我自己,还是我的代码真的错了,但当我使用相同的序列、工具箱中的相同对象、相同的名称和相同的参数时,它起作用了,有时也不起作用。@Ju chan
Private Sub UpdateClient()
Dim recordsAffected As Integer = 0
Dim sqlUpdateClient As String = "UPDATE tblClient " & _
"SET clientCompany = ?, " & _
" clientStreetAddress = ?, " & _
" clientCity = ?, " & _
" clientContactPerson = ?, " & _
" clientContactNumber = ?, " & _
" clientEmail = ?, " & _
" clientMobileNumber = ? " & _
"WHERE clientID = ?"
Using accessConnection As New OleDbConnection("connectionStringHere")
Using accessCommand As New OleDbCommand()
With accessCommand
.Connection = accessConnection
.CommandType = CommandType.Text
.CommandText = sqlUpdateClient
.Parameters.AddWithValue("clientCompany", txtClientCompany.Text)
.Parameters.AddWithValue("clientStreetAddress", txtClientStreetAddress.Text)
.Parameters.AddWithValue("clientCity", txtClientCity.Text)
.Parameters.AddWithValue("clientContactPerson", txtClientContactPerson.Text)
.Parameters.AddWithValue("clientContactNumber", txtClientPhoneNumber.Text)
.Parameters.AddWithValue("clientEmail", txtClientEmailAddress.Text)
.Parameters.AddWithValue("clientMobileNumber", txtClientMobileNumber.Text)
.Parameters.AddWithValue("clientID", selectedClient)
End With
Try
accessConnection.Open()
recordsAffected = accessCommand.ExecuteNonQuery()
Catch ex As OleDBException
lblError.Text = ex.Message.ToString()
Finally
accessConnection.Close()
End Try
If recordsAffected = 0 Then
MsgBox("Record updated failed!", MsgBoxStyle.Exclamation, "Project Analysis System")
Else
MsgBox("Record updated successfully!", MsgBoxStyle.Information, "Project Analysis System")
PopulateClientList()
End If
End Using
End Using
End Sub