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

Posted

技术标签:

【中文标题】试图读取或写入受保护的内存-Sql Compact 和 .NEt【英文标题】:Attempted to read or write protected memory-Sql Compact and .NEt 【发布时间】:2010-03-11 08:22:16 【问题描述】:

我尝试在两种情况下运行该应用程序:安装了 SQL Server 精简版 (3.5),一种未安装。未安装 SQL Server Compact 版本时,我收到以下错误:

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
----------------------------------------------------------

我正在使用this method 处理未处理的异常。

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

【问题讨论】:

【参考方案1】:

当我遇到这个问题时,问题是数据库连接:

如果您在重新打开连接之前未关闭连接,则会在“System.Data.SqlServerCe”周围收到此错误。

添加这一行就解决了我的问题:

SqlCeConnection conn = new SqlCeConnection(_connectionString);
conn.Close(); //adding this.


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

【讨论】:

【参考方案2】:

本机 SQL Compact 代码正在崩溃。这是非常不寻常的。而且非常不太可能是你的代码造成的。不是你可以调试的那种问题,你除了机器代码之外什么都没有。如果您运行任何其他进程内非托管代码,则认为它是造成不稳定性的原因。注销 PC 并在磁盘盘片之间拍摄是快速解决方法。

【讨论】:

你能不能简单介绍一下你的意思是“注销 PC 并在磁盘盘片之间拍摄它是快速解决方案。” 意思是:“摆脱机器,换一台”。【参考方案3】:

我自己的错误是由于我使用线程这一事实造成的。检查this link

异常的间歇性似乎表明 线程问题。本例中的 sql ce 数据库正在 多线程并发访问:一个是只写线程 由 SqlCeResultSet 对象使用,其他对象是只读的 LINQ 查询生成的操作。

【讨论】:

【参考方案4】:

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

【讨论】:

您对代码进行了哪些更改以使其正常工作?我认为我在 Visual Studio 2010 是打开数据库的“其他应用程序”中遇到了同样的问题。 -1 仅仅因为这不是答案。我很高兴你解决了你的问题,但总的来说,这个答案并没有告诉人们什么。

以上是关于试图读取或写入受保护的内存-Sql Compact 和 .NEt的主要内容,如果未能解决你的问题,请参考以下文章

PInvoke“试图读取或写入受保护的内存”

LinQ 试图读取或写入受保护的内存。这通常表明其他内存已损坏

由 urlmon.dll 引起的“试图读取或写入受保护的内存”

VB.NET 访问 - 试图读取或写入受保护的内存

“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

错误“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”