.net 打开简单OleDB连接会引发OutOfMemory异常?

.net 打开简单OleDB连接会引发OutOfMemory异常?,.net,windows,ms-access,oledb,out-of-memory,.net,Windows,Ms Access,Oledb,Out Of Memory,我对我们的一个申请有问题。它是.NET3.5 32位进程。启动时,我们打开一个.mdb来读取一些“元数据”值。这适用于数百个系统,但我们有一个客户有TabletPC和问题。操作系统是Windows XP Tablet PC SP3,32位,bla-bla。没什么不寻常的。它的.NET3.5(来自Windows Update)都是最新的。没什么不寻常的 由于我们的应用程序在启动过程中做了“一些事情”,因此我创建了有史以来最简单的控制台应用程序: namespace TestAccessConnec

我对我们的一个申请有问题。它是.NET3.5 32位进程。启动时,我们打开一个.mdb来读取一些“元数据”值。这适用于数百个系统,但我们有一个客户有TabletPC和问题。操作系统是Windows XP Tablet PC SP3,32位,bla-bla。没什么不寻常的。它的.NET3.5(来自Windows Update)都是最新的。没什么不寻常的

由于我们的应用程序在启动过程中做了“一些事情”,因此我创建了有史以来最简单的控制台应用程序:

namespace TestAccessConnection
{
    class Program
    {
        static void Main( string[] args )
        {
            OleDbConnection connection;
           try
            {
                connection =
                    new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=metadata.mdb;Persist Security Info=False");
                connection.Open();
                connection.Close();
                Console.Read();
            }
            catch ( Exception e )
            {
                Console.WriteLine(e.ToString());
                Console.Read();
            }
        }
    }
}
结果:

如果我们在同一路径中不使用文件“metadata.mdb”执行单个.exe,我们会得到一个明显的结果:“file not found bla bla”。这是正确的

如果我们复制元数据(稍后将详细介绍元数据),我们会得到以下结果:

System.OutOfMemoryException: An exception of type 'System.OutOfMemoryException' has occurred.
  at System.Data.Common.ADP.IsSysTxEqualSysEsTransaction()
  at System.Data.Common.ADP.NeedManualEnlistment()
  at System.Data.OleDb.OleDbConnection.Open()
  at TestAccessConnection.Program.Main(String[] args
注意:异常是西班牙语的,我翻译了它,但内容保持不变,唯一的区别是“类型的异常”,但名称空间未被触及

元数据中有什么内容?: 这是一个简单的MS ACCESS 2000文件,有一个表和两条记录(它以加密形式存储不同的MS-SQL连接字符串),因此启动时,我们可以读取连接,解密它们,并提供一个列表供用户选择不同的连接。 这些功能在我创建的测试程序中都不存在(或执行),因为异常(显然)是在connection.Open()中抛出的

有关此计算机的详细信息 这个盒子看起来很正常。我们已经从不同的来源(Windows Update)和dotnetfx.exe(250mb的大文件)重新安装了.NET,甚至还从那个大的.NET安装程序执行了“修复”。 NET似乎可以工作,因为这个小控制台应用程序的目标是.NET3.5

为什么要进行此测试? 控制台应用程序之所以会这样做,是因为我们自己的应用程序会这样做(在其他一些事情中),一旦它开始执行Main(),这是我们首先要做的事情之一,所以我隔离了这段代码,发现异常正在那里抛出。为了确保我们的代码都不需要做任何事情,我创建了测试应用程序并发现了奇怪的异常

谷歌呢? 我一直在疯狂地搜索google/SO/etc,但毫无结果。OutOfMemory是一个误导性很强的搜索词,即使与oledb和其他“可能”的关键字结合使用(“我可能遗漏了什么”)。尝试使用名称空间的其他部分进行搜索时,会发现奇怪的结果,这些结果似乎和这个特定问题无关

问题是什么? 哦,很简单:有什么想法吗

捕获 我试图避免重新安装整个Windows(这可能会解决这个问题,因为这个简单的东西可以在数百台其他计算机上运行)。这个盒子似乎没有受到恶意软件或类似软件的感染,它是一台用于医疗保健的平板电脑,因此即使使用“open”也很少使用互联网接入。 这并不意味着盒子是100%干净的(用Windows你永远无法确定)。 如果您知道或经历过此问题(并找到了解决方案),请告知我


提前谢谢

这已经过时一年多了,从那以后,我将代码移植到一个小XML文件中。从那时起,我们就没有遇到任何问题

基本上,应用程序会启动,如果没有检测到XML,它会查找MDB,如果找到它,它会尝试打开它(总是捕捉可能的错误),如果可以打开它,它会读取内容并创建XML,保存它并永远关闭MDB:)


到目前为止,它已经在1000多台机器上运行,但是内存错误的原因仍然未知。

虽然我完全支持在许多编程环境中使用Jet/ACE作为数据存储的人,但这对您正在使用的用户来说不是太过分了吗?为什么不是一个XML文件呢?对于这么少的数据,这不是很容易吗?是的,尽管你必须考虑这是六年前创建的事实。mdb是存储简单表的一种简单实用的方法。也许是时候替换它了(特别是现在我们知道不会有JET64位了)您是否尝试连接到其他oledb数据源?另一个msaccess文件?同一个文件使用另一个名称?我知道我的问题听起来很愚蠢,但你的问题令人惊讶。如果没有显示任何内容,我会按照DWF的建议使用XML文件作为存储数据的另一种方式。我没有尝试连接到其他数据源,msaccess文件已更改(即从其他工作系统复制)。我并没有把它改名为tho,也并没有想到它已经在than的名下工作了五年多。显然,一名“计算机技术人员”将重新安装这个盒子,因为当他试图修复.NET3.5时,他遇到了一些错误。我目前还没有实际接触到这个盒子。无论如何,我会认为XML是未来可行的选择。谢谢