【问题标题】:Attempted to read or write protected memory-Sql Compact and .NEt试图读取或写入受保护的内存-Sql Compact 和 .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 的“报告错误”对话框;我如何防止这种情况发生?如何解决导致此问题的原因?

【问题讨论】:

    标签: c# .net winforms sql-server-ce


    【解决方案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 仅仅因为这不是答案。我很高兴你解决了你的问题,但总的来说,这个答案并没有告诉人们什么。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 2011-01-08
        • 2012-09-21
        • 2012-04-16
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多