代码之家  ›  专栏  ›  技术社区  ›  Martin Marconcini

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

  •  1
  • Martin Marconcini  · 技术社区  · 15 年前

    我对我们的一个申请有问题。它是.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连接字符串),因此启动时,我们可以读取连接,解密它们,并提供一个列表供用户选择不同的连接。

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

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

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

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

    提前谢谢!

    1 回复  |  直到 15 年前
        1
  •  0
  •   Martin Marconcini    13 年前

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

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