Antwort an „Rolf B“ verfassen

Hallo Henry,

noch was anderes, so von C#+SQL Veteran zu C# Newbie. Die folgende Zeile kann man gar nicht rot genug machen…

cmd.CommandText = "SELECT * FROM writeplc WHERE LEFT(plcvarname," + plcname.Length + ") = " + "'" +
				                  plcname + "'";
  • SELECT * verwendet man bei interaktiven Abfragen, aber niemals in Programmcode. Gib die Spalten immer explizit an
  • Dein LEFT möchte vielleicht ein LIKE sein?
  • Ohne Parameter muss plcname auf Kontextwechsel behandelt werden. Eigentlich sind Parameter die bessere Idee.
  • Verwende keine Stringverkettung, sondern string.Format oder String-Interpolation (in JavaScript nennt man das Template-Strings):
cmd.CommandText = string.Format(
      "SELECT plcvarname, mpi, setpoint FROM writeplc WHERE plcvarname LIKE '{0}%'",
      MySqlHelper.EscapeString(plcname));

oder (beachte das $ vor den String-Teilen)

cmd.CommandText = $"SELECT plcvarname, mpi, setpoint FROM writeplc WHERE plcvarname LIKE '{MySqlHelper.EscapeString(plcname)}%'";

Die langen Zeilen kannst Du mit "verbatim strings" auf mehrere Zeilen verteilen, ähnlich wie in Java-Script Template-Strings oder in PHP den Heredoc-Strings:

cmd.CommandText = string.Format(
      @"SELECT plcvarname, mpi, setpoint 
        FROM writeplc 
        WHERE plcvarname LIKE '{0}%'",
      MySqlHelper.EscapeString(plcname));

@ und $ kann man auch kombinieren:

cmd.CommandText = $@"SELECT plcvarname, mpi, setpoint 
                     FROM writeplc 
                     WHERE plcvarname LIKE '{MySqlHelper.EscapeString(plcname)}%'";

Und wo wir gerade von Heredoc-Syntax sprechen, die hat man C# ab .net 7 (Compilerversion C# 11) als "raw string literals" eingeführt. Zusammen mit einem $ vorneweg ist auch String-Interpolation möglich – für SQL einfach ideal.

cmd.CommandText = $"""
   SELECT plcvarname, mpi, setpoint 
   FROM writeplc 
   WHERE plcvarname LIKE '{MySqlHelper.EscapeString(plcname)}%'
   """;

Wie in PHP bestimmt die Einrückung des abschließenden """, wieviele Leerstellen am Anfang der Zeilen des Raw String Literals entfernt werden.

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen