Actualización de error de acceso
Pregunta
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()
El comando de actualización más adelante me mantiene dando este error: "La conversión de la cadena" 'Donde [nombre de usuario] =' "escribir 'doble' no es válido." y yo no sé por qué. El campo aUserName es un campo de cadena y comprueba para asegurarse de que está poblada.
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
Solución
Hay un error tipográfico. Estás usando + caracteres concat al final de la cadena SQL en lugar de & caracteres
incorrecto
cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
"', [Last Name] = '" & aSurname & _
"', [Contact Number] = '" & aContactNum & _
"', [Password] = '" & aPassword & "', [User Rights] = '" & _
aUserRights + "' WHERE [Username] = '" + aUserName + "' "
' ^ ^ ^
derecho
cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
"', [Last Name] = '" & aSurname & _
"', [Contact Number] = '" & aContactNum & _
"', [Password] = '" & aPassword & "', [User Rights] = '" & _
aUserRights & "' WHERE [Username] = '" & aUserName & "' "
' ^ ^ ^
Otros consejos
utiliza el código SQL [Username]
:
cmd.CommandText = "UPDATE Users SET ... [Username]...
Mientras que usted comentó a cabo código utilizado [User Name]
:
'rsAddRecs = rsConn.Execute("UPDATE Users ... [User Name]...
Podría el nombre de la columna equivocada ser el origen del problema?
Otro pensamiento: Tiene Sanitized sus valores de los parámetros, por ejemplo, el valor podría contener una única cita que está alterando el SQL dinámico. En cualquier caso, creo que usted debe considerar el uso de declaraciones preparadas (o incluso procedimientos) y el uso de objetos de parámetros para llamar al SQL, difiriendo de esta manera la desinfección de los valores de los parámetros para el proveedor OLE DB, que, por supuesto, saber más sobre el tema de usted o yo:)