Domanda

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

Il comando update seguito continua a darmi questo errore: "La conversione da stringa" 'WHERE [nome utente] =' "al tipo 'doppio' non è valido." e io non so perché. Il campo aUserName è un campo di stringa e ho controllato per assicurarsi che sia popolata.

            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
È stato utile?

Soluzione

Si dispone di un errore di battitura. Stai usando + caratteri concat alla fine della stringa sql al posto di & caratteri

sbagliato

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

destro

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

Altri suggerimenti

Si utilizza il codice SQL [Username]:

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

Mentre si commentata codice utilizzato [User Name]:

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

Potrebbe il nome di colonna sbagliato essere la fonte del problema?

Un altro pensiero: avete Sanitized i valori dei parametri per esempio potrebbe il valore contenere un singolo citazione che sconvolge l'SQL dinamico. In ogni caso, penso che si dovrebbe considerare l'utilizzo di dichiarazioni preparate (o anche procedure) e l'utilizzo di oggetti Parameter per chiamare lo SQL, rinviando così la sanificazione dei valori dei parametri per il provider OLE DB, che ovviamente sapere di più sul soggetto che tu o io:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top