【发布时间】:2019-11-22 06:15:31
【问题描述】:
我有一个 VB.NET 应用程序并正在更新 MS Access 数据库,但行为很奇怪。如果我只提供一个参数,它就像一个魅力,但添加一个额外的参数,它们是交换。我的代码:
Using cmd = New OleDbCommand
cmd.Connection = conn
'cmd.Parameters.AddWithValue("@currentStaffId", currentRow.Item("StaffId"))
'cmd.Parameters.AddWithValue("@staffId", tempStaffId)
'cmd.Parameters.AddWithValue("@firstName", firstNameEdit.Text.Trim())
'cmd.Parameters.AddWithValue("@secondName", secondNameEdit.Text.Trim())
'cmd.Parameters.AddWithValue("@phone", tempPhone)
cmd.Parameters.AddWithValue("@email", emailAddressEdit.Text.Replace(" ", ""))
cmd.Parameters.AddWithValue("@username", usernameEdit.Text.Trim())
'cmd.Parameters.AddWithValue("@password", passwordEdit.Text.Trim())
'cmd.Parameters.AddWithValue("@isAdmin", If(Not isAdminEdit.IsChecked Or IsNothing(isAdminEdit.IsChecked), False, True))
cmd.CommandText = "UPDATE Tbusers SET [Username]=@username, [EmailAddress]=@email WHERE StaffId = 100"
cmd.ExecuteNonQuery()
dataTable.Rows.Item(dataTable.Rows.IndexOf(currentRow)).Item("StaffId") = tempStaffId
dataTable.Rows.Item(dataTable.Rows.IndexOf(currentRow)).Item("FirstName") = firstNameEdit.Text.Trim()
dataTable.Rows.Item(dataTable.Rows.IndexOf(currentRow)).Item("SecondName") = secondNameEdit.Text.Trim()
dataTable.Rows.Item(dataTable.Rows.IndexOf(currentRow)).Item("PhoneNumber") = tempPhone
dataTable.Rows.Item(dataTable.Rows.IndexOf(currentRow)).Item("EmailAddress") = emailAddressEdit.Text.Replace(" ", "")
dataTable.Rows.Item(dataTable.Rows.IndexOf(currentRow)).Item("Username") = usernameEdit.Text.Trim()
dataTable.Rows.Item(dataTable.Rows.IndexOf(currentRow)).Item("IsAdmin") = If(Not isAdminEdit.IsChecked Or IsNothing(isAdminEdit.IsChecked), False, True)
CloseUpdateUserModal(sender, e)
updateUsersTable()
End Using
现在,这将交换 email 和 username 参数,但如果我单独提供它们,它们可以正常工作。这一直让我发疯,谁能指出代码有什么问题或为什么会这样?我有一个插入语句,它适用于相同的结构。我已经注释掉了其他参数,因为更新不能完全工作,因为它不会引发错误,但是如果我使用所有这些参数,则 where 子句会因为无效值而跳过。顺便说一句,我试图单步执行代码并检查参数的各个值,它们反映了正确的值。任何帮助将不胜感激!
【问题讨论】:
-
按照它们在查询中出现的顺序添加参数 - 它实际上并不使用参数名称,只使用它们的位置。另外,Can we stop using AddWithValue() already? 和 AddWithValue is Evil。
-
谢谢,这真的很有帮助,如果是这样的话,那就太糟糕了,我来自另一种语言,情况并非如此,所以请原谅我的无知。
-
这仅适用于 OleDB 参数。