alterneuersack
Goto Top

MySql INSERT , versucht Code auszuführen und nicht in die Tabelle zu schreiben

Ich habe folgendes Problem,

string Code = Eingabe_Code.Text; 

MySqlCommand command = new MySqlCommand("INSERT INTO Programmieren (Sprache, Thema, Kategorie, Code, Abhängigkeiten, Zusatz, Erklärung) VALUES (' " + Sprache + "', '" + Thema + "', '" + Kategorie + "', '" + Code + "', '" + Abhängigkeiten + "', '" + Zusatz + "', '" + Erklärung + "' )", connection);  
command.ExecuteNonQuery();

Ich bekomme die Fehlermeldung Syntax Fehler im "Code", da er versucht den Code den ich eigentlich in eine Tabelle speichern möchte, aus zu führen.

Beispiel Daten für die Variable Code:
connectionString = @"server=localhost;port=3306;user id=root;password=;database=ddt";  
try
{
    connection = new MySql.Data.MySqlClient.MySqlConnection(connectionString);
    connection.Open();

    MySqlCommand command1 = new MySqlCommand("INSERT INTO Finanzen (ID, Datum, Ein_Aus, Abs_Emp, Verwendung, Summe, Bemerkung, Kategorie) VALUES ('NULL', ' " + datum1 + "', '"+ein_aus+"', '"+abs+"', '"+verwendung+"', '"+summe+"', '"+bemerkung+"', '"+kategorie1+"' )", connection);   
    command1.ExecuteNonQuery();

Das sollte eigentlich nicht ausgeführt werden.
Ist klar das er mit dem Code nix anfangen kann.

Wie kann ich dieses Problem am besten lösen?

Content-ID: 53985647874

Url: https://administrator.de/contentid/53985647874

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

ErikM87
Lösung ErikM87 11.10.2023 aktualisiert um 20:23:41 Uhr
Goto Top
Anstatt das SQL mittels String-Verkettung zusammen zu bauen, kann man quasi Platzhalter verwenden. Diesen Platzhaltern kann man anschließend Werte zuweisen - die dann auch nur als Daten interpretiert werden.

"INSERT INTO table (foo) VALUES ('bar')" wird quasi zu "INSERT INTO table (foo) VALUES (@ParameterName)"
Dem Platzhalter @parametername kann man dann mit command.Parameters.AddWithValue("@ParameterName", "bar"); den Wert "bar" zuweisen.

Parametrisierte Queries helfen auch gegen SQL-Injections. Als Beispiel könnten ja bei einer String-Verkettung in den einzelnen verwendeten Variablen die zum Bau des SQL-Strings herangezogen werden, bösartige Werte enthalten sein.

Parametrisierte Queries. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-param ...
AlterNeuerSack
AlterNeuerSack 11.10.2023 um 21:11:21 Uhr
Goto Top
Danke!