Question

    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()

La commande de mise à jour ci-dessous continue à me donner cette erreur: « Conversion de chaîne » « WHERE [Nom d'utilisateur] = » « taper « Double » est pas valide. » et je ne sais pas pourquoi. Le champ aUserName est un champ de chaîne et j'ai vérifié pour vous assurer qu'il est rempli.

            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
Était-ce utile?

La solution

Vous avez une faute de frappe. Vous utilisez + caractères concat à la fin de la chaîne sql au lieu de caractères

Mauvais

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

droite

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

Autres conseils

le code SQL utilise [Username]:

cmd.CommandText = "UPDATE Users SET ... [Username]...

Alors que vous avez dit sur le code utilisé [User Name]:

'rsAddRecs = rsConn.Execute("UPDATE Users ... [User Name]...

pourrait le nom de mauvaise colonne la source du problème?

Une autre pensée: avez-vous aseptisée vos valeurs de paramètres par exemple la valeur pourrait contenir une seule citation qui est bouleversant le SQL dynamique. Dans tous les cas, je pense que vous devriez envisager d'utiliser des déclarations préparées (ou même procédures) et l'utilisation d'objets de paramètre pour appeler le SQL, respectant ainsi l'désinfectante des valeurs de paramètres au fournisseur OLE DB, qui bien sûr en savoir plus sur le sujet que vous ou moi:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top