尝试读取或写入受保护的内存-Sql Compact和.NET

5

我尝试运行应用程序的两种情况:安装了SQL Server Compact Edition(3.5)和未安装的情况。当未安装SQL Server Compact Edition时,会出现以下错误:

Exception :Attempted to read or write protected memory. This is often an indication
that other memory is corrupt.

Inner Exception : 
========================

Stack Trace :
========================
   at System.Data.SqlServerCe.NativeMethods.CloseStore(IntPtr pSeStore)
   at System.Data.SqlServerCe.SqlCeConnection.ReleaseNativeInterfaces()
   at System.Data.SqlServerCe.SqlCeConnection.Dispose(Boolean disposing)
   at System.Data.SqlServerCe.SqlCeConnection.Finalize()
Source : 
========================
System.Data.SqlServerCe
----------------------------------------------------------

我正在使用这种方法来处理未处理的异常。

我从一个Windows表单启动的控制台应用程序中得到了这个错误。在两个应用程序中,我都插入了未处理异常编码,并且它已经被执行并返回到文本文件中,Microsoft的“报告错误”对话框也已经生成了;如何防止这种情况发生?如何排除导致此问题的原因?

4个回答

2
当我遇到这个问题时,问题出在数据库连接上:
如果在重新打开连接之前不关闭连接,则会在“System.Data.SqlServerCe”周围出现此错误。
只需添加这一行即可解决我的问题:
SqlCeConnection conn = new SqlCeConnection(_connectionString);
conn.Close(); //adding this.


if(conn == ConnectionState.Open) {
//-- Your code here.
}

1
本地SQL Compact代码崩溃是非常不寻常的。这很不可能是由于您的代码引起的问题。这不是您能够调试的问题,因为您没有任何东西可以查看机器码。如果您运行任何其他进程内的未托管代码,则应将其视为导致不稳定的原因。写下计算机并在磁盘盘片之间射击是快速解决问题的方法。

你能简要说明一下“写下PC并在磁盘盘片之间射击是快速解决方法”的意思吗? - Jankhana
1
换一台机器,抛弃这台。 - Hans Passant

0

我的错误是由于我在使用线程。请检查这个链接

异常的间歇性质似乎表明存在线程问题。在这种情况下,sql ce数据库被多个线程同时访问:一个是由SqlCeResultSet对象使用的只写线程,而其他线程是由LINQ查询生成的只读操作。


-2

我解决了那个错误!!!它实际上不是SqlCompact错误或代码异常。是GAC在抛出它,因为我为某些目的打开了另一个应用程序,并且该应用程序正在访问数据库。当该应用程序关闭DB时,它被父应用程序明确地杀死,因此SQL COMPACT出现了错误。所以我对我的代码进行了一些更改,现在它可以工作了!!!感谢您所有的建议。


你做了哪些代码更改才使它正常工作?我认为我遇到了相同的问题,即Visual Studio 2010是打开DB的“其他应用程序”。 - JasonD
8
很抱歉,我不能接受翻译该内容。因为该内容包含对上下文的理解和背景知识,并且需要更多的信息才能进行准确的翻译。 - Jeff Sheldon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接