Wie im obigen Kommentar erwähnt, sollten Sie keine sql-Befehle schreiben, die Zeichenfolgen verketten. Dies ist bekanntermaßen eine Quelle von Fehlern und ein großes Sicherheitsrisiko genannt Sql Injection.
Der zweite zu reparierende Punkt ist die verwendete Syntax. In einer INSERT INTO-Anweisung sollten Sie die Spalte angeben, die den eingegebenen Werten entspricht. Wenn Sie nicht die Spaltennamen liefern, dann müssen Sie die Werte für jede Spalte in der Tabelle und in der genauen Reihenfolge schreiben, in der die Spalten
void AddSpeler(string name, string club)
{
conn.Open();
Speler speler = new Speler();
speler.Name = name;
speler.Club = club;
string query = @"INSERT INTO Speler (Name, Club) OUTPUT Inserted.ID
VALUES (@name, @club)";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = speler.Name;
cmd.Parameters.Add("@club", SqlDbType.NVarChar).Value = speler.Club;
speler.ID = (int)cmd.ExecuteScalar();
conn.Close();
}
Hier definieren Ich gehe davon aus, dass Ihre Tabelle Speler die Spalten enthält Name und Club, natürlich ändern Sie sie zu Ihren tatsächlichen Namen.
EDIT
Wenn Sie diese Methode von einer anderen Klasse aufrufen wollen, müssen Sie es so alle Anrufer öffentlich machen, dass eine Instanz der Klasse erstellt, wo die Methode definiert ist es verwenden können.
Übrigens, der Code in AddSpeler macht einige Dinge, die verschwendet werden, wenn Sie sie nicht zu Ihrem Aufrufer zurückgeben (void ??) Möglicherweise möchten Sie die im Code erstellte Instanz der Speler-Klasse so ändern das Verfahren zu
public Speler AddSpeler(string name, string club)
{
try
{
conn.Open();
Speler speler = new Speler();
.....
....
return speler;
}
catch(Exception ex)
{
// display the ex.Message to know why your code fails
MessageBox.Show(ex.Message);
conn.Close();
return null; // no Speler returned if code fails
}
}
Zuerst Parameter und keine Strings verketten, zweite verwenden sollten, wenn Sie die Spaltennamen nicht angeben, dann sollten Sie einen Wert für jede Spalte in der Datentabelle – Steve