1

我有一个用户在使用我的应用程序时报告此错误。

该应用程序是在 Windows XP Embedded 上运行的 .NET Winforms 应用程序,使用 SQL Server CE 3.5 sp1 和 Linq-To-SQL 作为 ORM。数据库本身位于我的应用程序在文件夹中创建的子目录中My Documents。用户帐户是系统上的管理员帐户。没有其他应用程序或进程连接到数据库。

在大多数情况下,该应用程序似乎运行良好。它启动,可以从数据库加载数据和将数据保存到数据库。用户每天可能使用该应用程序访问数据库数百次。他们收到此错误,但只是间歇性的。可能一天3-4次。

在代码本身中,对数据库的所有调用都使用包装在using子句中的 Linq-To-SQL 数据上下文。换句话说:

using(MyDataContext db = new MyDataContext(ConnectionString))
{
     List<blah> someList = db.SomeTable.Where(//selection criteria).ToList();

     return(someList);
}

这就是几乎所有对数据库的调用的样子(除了那些保存数据的调用显然没有选择和返回任何东西)。正如我之前提到的,他们 99% 的时间都没有问题,但每天只会出现几次共享内存错误。

我当前的“修复”是在应用程序启动时,我只是从数据库中读取所有数据(没有很多)并将其缓存在内存中,并将我的数据库调用转换为从内存列表中读取。到目前为止,这似乎已经解决了这个问题。一天半以来,他们没有报告任何问题。但这仍然困扰着我,因为我不知道首先会导致错误的原因。

虽然应用程序每天访问数据库数百次,但通常不会快速连续。通常至少每隔几分钟一次。但是,在一个用例中,可能有两个呼叫一个接一个,尽可能快。换句话说,类似:

//user makes a selectio n on the screen
DatabaseCall1();
DatabaseCall2();

两者都将遵循上面代码块中的模式,它们创建一个新的上下文,工作,然后返回。但是这些调用不是异步的,所以我希望在调用 DatabaseCall2 之前关闭并处理掉连接。但是,可能是 SQL Server CE 端的某些东西没有足够快地关闭连接吗?它可以解释为什么它是间歇性的,因为也许大多数时候它没有问题?我还应该提到,这个没有修复的确切程序安装在其他几个具有完全相同硬件和软件的系统上(它们是彼此的克隆),并且其他系统的用户没有报告任何错误。

我一直摸不着头脑,因为我无法在我的开发机器或测试机器上重现此错误,并且此处和其他地方有关此异常的问题的答案通常围绕用户权限不足或共享网络文件夹上的数据库。

4

1 回答 1

0

看看这个之前的帖子,我想你会找到你的答案:-

SQL Server CE - 内部错误:无法打开共享内存区域

于 2012-11-30T18:46:24.007 回答