Pregunta

Estoy trabajando en un programa de consola en C # que agarra un gran número de registros de una tabla, los ejecuta a través de un mero médica, y luego actualiza cada uno de los registros. Utiliza MySQL Connector / NET 5.2.7. La forma en que funciona es que agarro fragmentos de datos a la vez (es decir, 20.000 filas) utilizando SQL_BUFFER_RESULT a cerraduras evitar. Cada registro se ejecuta a través del mero, y luego una consulta de actualización individual que se realiza en un registro. Hay dos conexiones de segunda mano, una conexión de lectura y escritura de una conexión.

Así como se ejecuta el programa y se realiza un bucle a través de los registros de la consulta de lectura, utilizando su result.Read () para hacerlo, cuando sea resultado es un MySqlDataReader. La llamada result.Read es donde se lanza no es una excepción. Sucede al azar (no en el mismo registro o cualquier cosa). Una vez que se encuentra en el primer registro, también se encontró en cada llamada de lectura posterior para el lector de datos. He intentado muchas cosas y busqué alta y baja para los problemas relacionados con otros han tenido. Cualquier idea sería grande, y no dude en dejarme saber qué otra información necesito proporcionar.

¿Fue útil?

Solución

Entre connection.Open (); y command.ExecuteNonQuery (); Acabo de añadir dos líneas de la siguiente manera:

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();

problema fijo:)

Otros consejos

Creo que hay limitaciones de tamaño de búfer con el conector .NET al leer grandes conjuntos de datos. He trabajado en torno a este problema mediante la lectura de los registros de 5000 a la vez.

O simplemente:

cmd.CommandTimeout = 99999;

he tenido clases similares de problemas con el conector .NET. El error puede ser la velocidad relacionados - C # puede estar tratando de procesar los datos más rápido que MySQL puede mantener el ritmo. Me acaban de hacer dos cosas a un recurso -. 1. Añadir un temporizador de apagado automático cuando se produce un error (o después de procesar una gran sección) por lo que el sistema puede "respirar" o 2. Trate de leer de nuevo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top