Estoy ejecutando Sql Server Compact Edition 3.5.1.0 SP1 en una aplicación multi-hilo. La aplicación ejecuta aleatoriamente consultas de inserción en transacciones. Con transacciones cortas, funciona bien. Pero cuando las transacciones se hacen más largos y demora entre ejecuciones se hacen más cortos o cuando corro la aplicación en modo de depuración, SQLCE comienza a tirar de la siguiente excepción al azar:Sql Compact produce al azar AccessViolationException
AccessViolationException Intento de leer o escribir en la memoria protegida. Esto es a menudo una indicación de que otra memoria está dañada.
en System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan() en System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand (CommandBehavior comportamiento, el método de cuerdas, opciones ResultSetOptions) en System.Data.SqlServerCe.SqlCeCommand .ExecuteNonQuery() en SqlCompactTest.TransactedCommandGroupExecutionTest.Test() en D: \ Proyectos \ PlayGround \ SqlCompactTest \ SqlCompactTest \ TransactedCommandGroupExecutionTest.cs: línea 53 en SqlCompactTest.ExecutionTest.RunTest() en D: \ Projects \ PlayGround \ SqlCompactTest \ SqlCompactTest \ ExecutionTest.cs: línea 60 en SqlCompactTest.ExecutionTest.TimerElapsed (Object remitente, ElapsedEventArgs e) en D: \ Projects \ PlayGround \ SqlCompactTest \ SqlCompactTest \ ExecutionTest.cs : línea 68 al System.Timers.Timer.MyTimerCallback (objeto estado)
El código me postulo es:
IDbConnection connection = m_connectionProvider.GetConnection(); // Just returns new connection
connection.Open();
IDbTransaction transaction = connection.BeginTransaction();
foreach (IDbCommand command in m_commands)
{
command.Connection = connection;
command.ExecuteNonQuery(); // This line throws exception
Thread.Sleep((int)m_delayBetweenExecutions);
}
transaction.Commit();
connection.Close();
Este código se ejecuta simultáneamente en tw o hilos. cadena de conexión es:
"Data Source=testDB.sdf;Encrypt Database=True;Password=test;File Mode=Read Write;Persist Security Info=False;Max Database Size=1024"
he encontrado las soluciones absurdas en Internet como volver de nuevo a Framework 1.1, cambiando el orden de los argumentos del método, habilitar/deshabilitar optimizaciones etc., pero ninguno de ellos trabajaron para mí. También repetí en possible solutions on microsoft sites pero no pude encontrar una solución que me funcionara. Mi versión del archivo de base de datos es 3.5.0.0.
¿Cómo puedo solucionar esto?
HAs el error ha sido reparado? Necesito ahora la respuesta –