c# mysql Start Transaction
bearbeitet vonHallo Henry,
noch was anderes.
~~~c#,bad
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
- Verwende keine Stringverkettung, sondern string.Format oder Template-Strings
~~~c#
cmd.CommandText = string.Format(
"SELECT plcvarname, mpi, setpoint FROM writeplc WHERE plcvarname LIKE '{0}%'",
MySqlHelper.EscapeString(plcname));
~~~
oder (beachte das $ vor den String-Teilen)
~~~c#
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 den Heredoc-Strings in PHP:
~~~c#
cmd.CommandText = string.Format(
@"SELECT plcvarname, mpi, setpoint
FROM writeplc
WHERE plcvarname LIKE '{0}%'",
MySqlHelper.EscapeString(plcname));
~~~
@ und $ kann man auch kombinieren:
~~~c#
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.
~~~c#
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