我对我们的一个申请有问题。它是.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”也很少使用互联网接入。
如果您知道或经历过此问题(并找到了解决方案),请告知我。
提前谢谢!