Aktualisieren der Zugriffsfehler
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
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:)