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
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top