2010-03-30 5 views
7

Ich arbeite an einem C# -Konsolenprogramm, das eine große Anzahl von Datensätzen aus einer Tabelle erfasst, sie durch einen medizinischen Grouper ausführt und dann alle Datensätze aktualisiert. Es verwendet MySQL Connector/NET 5.2.7. Die Art und Weise, wie es funktioniert, ist, dass ich Datenblöcke auf einmal (d. H. 20 000 Zeilen) mit SQL_BUFFER_RESULT abrufe, um Sperren zu vermeiden. Jeder Datensatz wird durch den Grouper ausgeführt, und dann wird eine individuelle Aktualisierungsabfrage für diesen einen Datensatz ausgeführt. Es gibt zwei Verbindungen, eine Lese- und eine Schreibverbindung.MySQL-Ausnahme - Schwerwiegender Fehler beim Lesen der Daten

So wie das Programm ausgeführt wird und es Datensätze von der Leseabfrage durchläuft, verwenden Sie result.Read(), um dies zu tun, wobei das Ergebnis ein MySqlDataReader ist. Das result.Read-Aufruf ist, wo dort Ausnahme ausgelöst wird. Es passiert zufällig (nicht auf dem gleichen Datensatz oder irgendetwas). Sobald es im ersten Datensatz gefunden wird, wird es auch bei jedem nachfolgenden Leseaufruf für den Datenleser gefunden. Ich habe viele Dinge ausprobiert und nach verwandten Problemen gesucht, die andere hatten. Jeder Einblick wäre großartig, und fühlen Sie sich frei, mir zu sagen, welche anderen Informationen ich zur Verfügung stellen muss.

+0

Was war die Ausnahme, die ausgelöst wurde? –

Antwort

11

Zwischen connection.Open(); und command.ExecuteNonQuery(); Habe ich nur noch zwei Zeilen wie diese:

connection.Open(); 

MySqlCommand cmd = new MySqlCommand("set net_write_timeout=99999; set net_read_timeout=99999", connection); // Setting tiimeout on mysqlServer 
cmd.ExecuteNonQuery(); 

int numOfRecordsUpdated = command.ExecuteNonQuery(); 

Problem behoben :)

+0

Das scheint mir auch geholfen zu haben, aber gibt es einen anderen/besseren Weg, diese Timeouts dauerhaft zu setzen (auf einer Windows-Installation) anstatt einen Befehl wie diesen nach jeder 'connection.Open()'? –

0

Ich hatte ähnliche Probleme mit dem .NET-Connector. Der Fehler kann geschwindigkeitsabhängig sein - C# versucht möglicherweise, die Daten schneller zu verarbeiten, als MySQL mithalten kann. Am Ende mache ich zwei Dinge, um Abhilfe zu schaffen: 1. Fügen Sie einen Sleep-Timer hinzu, wenn ein Fehler auftritt (oder nach der Verarbeitung eines großen Abschnitts), damit das System "atmen" oder 2. versuchen kann, erneut zu lesen.

0

Ich glaube, es gibt Puffergrößenbeschränkungen mit dem .NET-Connector beim Lesen großer Datensätze. Ich habe dieses Problem gelöst, indem ich 5000 Datensätze gleichzeitig gelesen habe.

Verwandte Themen