2017-07-14 4 views
1

Hier ist mein Code, wenn ich Eingabe in die Textfelder dann auf die Schaltfläche klicken, dann tritt ein Fehler auf:SqlException in ExecuteNonQuery

SqlException wurde nicht behandelt, Spaltenname oder Anzahl der übergebenen Werte nicht Tabellendefinition

Bitte helfen

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=XXYZZ\SQLEXPRESS;AttachDbFilename=C:\Users\trist\Documents\Invent.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;"); 

    SqlCommand cmd = new SqlCommand ("Insert into tblLogin values ('"+ txtUsername.Text + '"'+ txtPassword.Text + "')",con); 

    con.Open(); 
    int i = cmd.ExecuteNonQuery(); 
    con.Close(); 

    if (i > 0) 
    { 
     MessageBox.Show("Registered"); 
    } 
    else 
    { 
     MessageBox.Show("HEHE"); 
    } 
} 
+6

Sie haben ein ',' zwischen zwei Werten verpasst, die Sie übergeben! Vorsicht vor SQL-Injektion –

+1

Sie sollten wirklich [Using Statement] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement) verwenden. –

Antwort

2

Ihr Einsatz SQL verfügt über zwei Spaltenwerte, die mit Komma getrennt werden müssen, aber es gibt keine:

// your incorrect SQL query: 
SqlCommand cmd = new SqlCommand ("Insert into tblLogin values ('"+ txtUsername.Text + '"'+ txtPassword.Text + "')",con); 

Aber anstatt dies zu beheben, sollten Sie parametrisierte Abfragen verwenden, z.

SqlCommand cmd = new SqlCommand ("Insert into tblLogin values (@user, @password)",con); 
cmd.Parameters.Add("@User", SqlDbType.VarChar).Value = txtUsername.Text; 
cmd.Parameters.Add("@Password", SqlDbType.VarChar).Value = txtPassword.Text; 

Sie sollten auch die using Erklärung für alles verwenden, die IDisposable wie die Verbindung und den Befehl implementiert: SQL-Injection zu verhindern. Auf diesem Weg Stellen Sie sicher, dass die Verbindung auch im Ausnahmefall entsorgt/geschlossen wird (wichtig).

+0

Außerdem würde ich empfehlen, * immer * explizit die Spalten der Tabelle anzugeben, in die Sie Ihre Daten einfügen. Hilft unnötige Überraschungen und Probleme zu vermeiden –

-1

Sie verfehlten ein Komma (,) zwischen

values ('"+ txtUsername.Text + '"'+ txtPassword.Text + "')",con); 

besser die Spaltennamen angeben.

INSERT INTO MyTable(Column1, Column2) 
VALUES (Value1, Value2), (Value1, Value2)