2017-02-15 2 views
0

Ich mache ein Programm und ich bin in einem Teil, den ich brauche, um Benutzer in der Datenbank in Zugriff zu erstellen. Aber nachdem ich die Daten eingegeben und auf die Schaltfläche "Benutzer erstellen" geklickt habe, erhalte ich einen Fehler. Wenn Sie Benutzer in die Datenbank funktioniert es, aber wenn Sie versuchen, es durch das Programm hinzuzufügen, ist das Ergebnis ein SyntaxfehlerVisual Basic Erstellen Sie Benutzer in Datenbankzugriff

Else 
    Try 
     Dim myconnection As OleDbConnection 
     Dim constring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Software_Simples\Software\DataBase.accdb" 
     myconnection = New OleDbConnection(constring) 
     myconnection.Open() 
     Dim sqlQry As String 

     'sqlQry = "INSERT INTO Usernames(Username, Password) VALUES(" & TextBox2.Text & "," & TextBox3.Text & ")" 
     sqlQry = "INSERT INTO Usernames(ID_User, Username, Password) VALUES(Null,TextBox2.Text,TextBox3.Text)" 

     Dim cmd As New OleDbCommand(sqlQry, myconnection) 
     cmd.ExecuteNonQuery() 

     myconnection.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
    'Fechar 
    Me.Close() 
    MessageBox.Show("Utilizador criado com suecesso: " & username_create, "Aviso", MessageBoxButtons.OK) 
End If 
+0

Jetzt ist es gut? –

+0

Ja, das ist der richtige Weg, um Code zu schreiben. Jetzt zurück zu deinem Problem. Wie ich gesagt habe. Passwort ist ein reserviertes Keyword. Wenn Sie es von ADO.NET verwenden, müssen Sie es in eckige Klammern setzen. – Steve

+0

Sie können den Code schreiben, ich bin mir nicht ganz sicher, was Sie sagen. –

Antwort

0

Es sollte lauten:

sqlQry = "INSERT INTO Usernames (ID_User, Username, [Password]) VALUES (Null,'" + TextBox2.Text + "','" + TextBox3.Text + "')" 
+0

Ich habe ähnlich gesehen, aber kein Duplikat. – Gustav

1

Es gibt mindestens drei Probleme in Ihr Code:
1) Passwort ist ein reserviertes Schlüsselwort. Muss zwischen eckigen Klammern stehen
2) Zeichenketten müssen bei der Übergabe an eine Datenbank zwischen einfachen Anführungszeichen stehen, aber .. siehe Punkt 3
3) Verwende Parameter anstelle von Stringverkettungen (was ist, wenn das Passwort ein einfaches Anführungszeichen enthält?)
4) Entsorgen Sie das Einwegobjekt wie die Verbindung und den Befehl.

Neuschreiben So ist es

Dim constring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Software_Simples\Software\DataBase.accdb" 
Dim sqlQry = "INSERT INTO Usernames(Username, [Password]) VALUES(@name, @pwd)" 
Try 
    Using myconnection = New OleDbConnection(constring) 
    Using cmd As New OleDbCommand(sqlQry, myconnection) 
     myconnection.Open() 
     cmd.Parameters.Add("@name", OleDbType.VarWChar).Value = TextBox2.Text 
     cmd.Parameters.Add("@pwd", OleDbType.VarWChar).Value = TextBox3.Text 
     cmd.ExecuteNonQuery() 
    End Using 
    End Using 
Catch ex As Exception 
    MessageBox.Show(ex.Message) 
End Try 
+0

Verpassen Sie nicht Dim sqlQry als Zeichenfolge –

+0

Korrigiert. Es ist wirklich nicht notwendig, _as String_ zu verwenden, wenn der Compiler vom Kontext den Typ der Variablen sehen kann, die zugewiesen werden soll. (Aber Dim ja) – Steve

+0

Geben Sie mir Fehler Syntaxfehler in wählen Sie in –