Frage

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

Der Update-Befehl unten hält mir diesen Fehler geben: „‚Double‘zu geben ist nicht gültig“ „Konvertierung von String“ ‚WHERE [Benutzername] =‘ und ich weiß nicht, warum. Das aUserName Feld ist ein String-Feld, und ich überprüft, um sicherzustellen, es bevölkert ist.

            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
War es hilfreich?

Lösung

Sie haben einen Tippfehler. Sie verwenden + Concat Zeichen am Ende der SQL-Zeichenfolge anstelle von & Zeichen

Wrong

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

Recht

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

Andere Tipps

Sie SQL-Code verwendet [Username]:

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

Während Sie Code verwendet [User Name] auf Kommentar:

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

Könnte die falsche Spalte Name der Quelle des Problems sein?

Ein anderer Gedanke: Sie haben Ihre Parameterwerte hygienisiert z.B. der Wert könnte einen Apostroph enthält, die die dynamische SQL ist bestürzend. Auf jeden Fall denke ich, sollten Sie mit Prepared Statements berücksichtigen (oder sogar Procedures) und Parameter-Objekten mit dem SQL aufrufen, wodurch die Hygienisierung der Parameterwerte an den OLE DB-Provider aufzuschieben, was natürlich mehr über das Thema wissen als Sie oder ich:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top