Vb.net 更新访问错误

Vb.net 更新访问错误,vb.net,ms-access,updating,Vb.net,Ms Access,Updating,下面的update命令一直给我这个错误:“从字符串“'WHERE[Username]=””转换为键入“Double”是无效的。”我不知道为什么。aUserName字段是一个字符串字段,我检查了它是否已填充 Dim conn As OleDbConnection Dim cmd As OleDbCommand Public Sub openDB() conn = New OleDbConnection("Provider=Microsoft.Jet.OLE

下面的update命令一直给我这个错误:“从字符串“'WHERE[Username]=””转换为键入“Double”是无效的。”我不知道为什么。aUserName字段是一个字符串字段,我检查了它是否已填充

    Dim conn As OleDbConnection
    Dim cmd As OleDbCommand

    Public Sub openDB()
        conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\VFMS_DB.mdb;" & "Jet OLEDB:System Database=Security.mdw;User ID=Adster;Password=300624;")
        conn.Open()
    End Sub

    Public Function UpdateUser() As Integer
        Dim retCode As New Integer

        Try
            openDB()
            cmd = conn.CreateCommand()

你打错了。您在sql字符串的末尾使用了+concat字符,而不是&字符

错误

            cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & "', [Last Name] = '" & aSurname & "', [Contact Number] = '" & aContactNum & "', [Password] = '" & aPassword & "', [User Rights] = '" & aUserRights + "' WHERE [Username] = '" + aUserName + "' "

            cmd.ExecuteNonQuery()
            conn.Close()

            'rsAddRecs = rsConn.Execute("UPDATE Users ([First Name], [Last Name], [Contact Number], [User Name], [Password], [User Rights]) VALUES ('" & aName & "','" & aSurname & "','" & aContactNum & "','" & aUserName & "','" & aPassword & "','" & aUserRights & "')")

            retCode = 0
            'rsConn.Close()
            Return retCode

        Catch ex As Exception
            MessageBox.Show(ex.ToString, ex.Message, MessageBoxButtons.OK)
            retCode = 1
            Return retCode
        End Try
    End Function

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _ 
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights + "' WHERE [Username] = '" + aUserName + "' "
'                             ^                          ^           ^

你打错了。您在sql字符串的末尾使用了+concat字符,而不是&字符

错误

            cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & "', [Last Name] = '" & aSurname & "', [Contact Number] = '" & aContactNum & "', [Password] = '" & aPassword & "', [User Rights] = '" & aUserRights + "' WHERE [Username] = '" + aUserName + "' "

            cmd.ExecuteNonQuery()
            conn.Close()

            'rsAddRecs = rsConn.Execute("UPDATE Users ([First Name], [Last Name], [Contact Number], [User Name], [Password], [User Rights]) VALUES ('" & aName & "','" & aSurname & "','" & aContactNum & "','" & aUserName & "','" & aPassword & "','" & aUserRights & "')")

            retCode = 0
            'rsConn.Close()
            Return retCode

        Catch ex As Exception
            MessageBox.Show(ex.ToString, ex.Message, MessageBoxButtons.OK)
            retCode = 1
            Return retCode
        End Try
    End Function

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _ 
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights + "' WHERE [Username] = '" + aUserName + "' "
'                             ^                          ^           ^

您的SQL代码使用
[Username]

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights & "' WHERE [Username] = '" & aUserName & "' "
'                             ^                          ^           ^
cmd.CommandText = "UPDATE Users SET ... [Username]...
而您注释掉了使用的代码
[用户名]

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights & "' WHERE [Username] = '" & aUserName & "' "
'                             ^                          ^           ^
cmd.CommandText = "UPDATE Users SET ... [Username]...
错误的列名可能是问题的根源吗


另一个想法是:您是否清理了参数值,例如,该值是否可能包含一个打乱动态SQL的单引号。在任何情况下,我认为您应该考虑使用准备好的语句(或甚至过程),并使用参数对象调用SQL,从而推迟参数值的清理到OLE DB提供程序,当然这将比您或I知道更多的主题:)

< p>您的SQL代码使用<代码> [用户名] < /代码>:

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights & "' WHERE [Username] = '" & aUserName & "' "
'                             ^                          ^           ^
cmd.CommandText = "UPDATE Users SET ... [Username]...
而您注释掉了使用的代码
[用户名]

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights & "' WHERE [Username] = '" & aUserName & "' "
'                             ^                          ^           ^
cmd.CommandText = "UPDATE Users SET ... [Username]...
错误的列名可能是问题的根源吗

另一个想法是:您是否清理了参数值,例如,该值是否可能包含一个打乱动态SQL的单引号。在任何情况下,我认为您应该考虑使用准备好的语句(或甚至过程),并使用参数对象调用SQL,从而推迟参数值的清理到OLE DB提供程序,当然这将比您或I更了解主题: