Hallo Rolf,
vielen Dank und soweit verstanden. Ich habe nun alle Funktionen überprüft und dies geändert. Jetzt habe ich ein Problem, gleiche Fehlermeldung, aber erst beim > 200 Durchlauf, teilweise 500 - 600 Durchläufe bevor der Fehler mit dem datareader kommt.
Fehlerzeile cmd.ExecuteNonQuery();
Hier kommt auch deine Idee mit der sql-Befehlsverkettung vor 👍
Es kommt immer 1-2 mal vorher ein catch, danach der offene DataReader
Der "counter" ist nur zu Testzwecken eingebaut und hat keinerlei Bewandtnis
public static bool write_plcactvalue_database(Dictionary<string, string> plcactvalue)
{
string sql = "";
// Werte über Parameter hinzufügen
foreach (var dic in plcactvalue)
{
sql += $"UPDATE datapoints SET actvalue = '{MySqlHelper.EscapeString(dic.Value)}' WHERE plcvarname = '{MySqlHelper.EscapeString(dic.Key)}';";
if (Program.debuglevel == 2)
{ Console.WriteLine($"Schlüssel: {dic.Key}, Wert: {dic.Value}"); }
}
try
{
using (MySqlCommand cmd = new MySqlCommand(sql, connection))
{
cmd.ExecuteNonQuery();
if (Program.debuglevel == 2)
{ Console.WriteLine($"SPS-Werte geschrieben: {sql}"); }
ConnectSql.sqlProgramm.mycounter += 1;
// Console.Clear();
Console.WriteLine($"\nCounter: {ConnectSql.sqlProgramm.mycounter}");
}
return true;
}
catch (Exception e)
{ Console.WriteLine($"Fehler beim schreiben der SPS-Werte in die Datenbank: {e}"); }
return false;
}
Vielleicht fällt dir oder jemand anderen etwas auf.
Vielen Dank !!!