Rolf B: c# mysql Start Transaction

Beitrag lesen

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