Hallo der henry,
Gibt es unter c#/.net nicht ähnliches ??
Das ist kein C#-Problem. Es gibt in SQL keinen "Array-Update".
WOLLTE ICH SCHREIBEN. Aber dann hab ich gegoogelt, und MySQL bietet 2 Möglichkeiten.
Aber bevor du damit anfängst:
- Läuft der DB-Server auf dem gleichen Gerät wie der Webserver? Wenn ja, sind Server-Roundtrips billig. Wenn nein, sieht die Sache schon anders aus.
- Wieviele plcvarnames aktualisierst Du? Hast Du mit den Einzel-Updates Performance-Probleme? Wenn nicht, dann fang nicht das Optimieren an.
Zu den möglichen Lösungen:
(1) der ON DUPLICATE KEY Trick
Voraussetzung: plcvarname ist ein unique key in der datapoints-Tabelle
INSERT INTO datapoints (plcvarname, actvalue)
values (@key1, @value1),
(@key2, @value2),
(@key3, @value3)
ON DUPLICATE KEY
UPDATE actvalue = VALUES(actvalue)
Den Values-Teil kannst Du mit C# in einem StringBuilder generieren (bitte nicht mit String-Verkettung in einer Schleife), und gleichzeitig fügst Du pro Durchlauf dem SqlCommand zwei Parameter mit den Werten hinzu.
Oder Du verzichtest auf Parameter und verwendest die EscapeString-Methode vom MySqlHelper, um die plcvarname Werte für den Kontextwechsel vorzubereiten. Bei den actvalue-Werten hängt die richtige Behandlung vom Datentyp ab. Sind das Zahlen oder auch Strings?
Du musst natürlich aufpassen, dass Du nicht versehentlich einen unbekannten plcvarname verwendest, sonst hast Du eine neue Row erzeugt.
(2) Das REPLACE Statement. Schau es Dir in der MySQL/MariaDB Doku an. Ob es für Dich nutzbar ist, hängt von deinen Daten ab.
Das Thema Parameter vs EscapeString hast Du hier auch.
Unabhängig von MySQL gibt es auch eine Möglichkeit 3, die setzt aber voraus, dass die plcvarname Werte klar definiert sind und Du immer ein bestimmtes Set von plcvarnames setzt. Wenn Du bspw. immer die plcvarnames foo, bar und baz gemeinsam setzt, dann schreibe eine Prozedur, die diese drei Parameter bekommt und dann auf dem Server, ohne weitere Server-Roundtrips, die Updates macht. Diese Prozedur rufst Du mit einem MySqlCommand vom CommandType StoredProcedure auf.
Rolf
sumpsi - posui - obstruxi