相关疑难解决方法(0)

Sql Compact随机生成AccessViolationException

我在多线程应用程序中运行Sql Server Compact Edition 3.5.1.0 SP1.应用程序在事务中随机运行插入查询.随着短交易,它工作正常.但是当事务变得更长并且执行之间的延迟变得更短或者我在调试模式下运行应用程序时,SqlCE开始随机抛出以下异常:

AccessViolationException尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()位于SqlCompactTest.TransactedCommandGroupExecutionTest.Test的System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()的System.Data.SqlServerCe.SqlCmandCommand.ExecuteCommand(CommandBehavior behavior,String method,ResultSetOptions options)中的System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan() ()在D:\ Projects\PlayGround\SqlCompactTest\SqlCompactTest\TransactedCommandGroupExecutionTest.cs:第53行,位于D:\ Projects\PlayGround\SqlCompactTest\SqlCompactTest\ExecutionTest.cs中的SqlCompactTest.ExecutionTest.RunTest():第60行,位于SqlCompactTest.ExecutionTest .TimerElapsed(Object sender,ElapsedEventArgs e)位于D:\ Projects\PlayGround\SqlCompactTest\SqlCompactTest\ExecutionTest.cs:第68行,位于System.Timers.Timer.MyTimerCallback(对象状态)

我正在运行的代码是:

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();
Run Code Online (Sandbox Code Playgroud)

此代码在两个线程中同时运行.连接字符串是:

"Data Source=testDB.sdf;Encrypt Database=True;Password=test;File Mode=Read Write;Persist Security Info=False;Max Database Size=1024"
Run Code Online (Sandbox Code Playgroud)

我在互联网上找到了荒谬的解决方案,比如回归到Framework 1.1,更改方法参数的顺序,启用/禁用优化等等,但它们都不适用于我.我还在微软网站上迭代了可能的解决方案,但我找不到适合我的解决方案.我的数据库文件版本是3.5.0.0.

我怎么解决这个问题?

access-violation sql-server-ce

5
推荐指数
2
解决办法
3933
查看次数

标签 统计

access-violation ×1

sql-server-ce ×1