【发布时间】:2011-06-26 18:50:14
【问题描述】:
ACE OLEDB 驱动程序是否存在较大文件的已知问题? 我正在使用以下代码检索 400Mb xls 文件中的工作表
public string[] GetWorkSheets()
{
var connectionString = "Provider=Microsoft.ACE.OleDb.12.0; data source=c:\filepath\filename.xls; Extended Properties=\"Excel 8.0;IMEX=1;HDR=YES;\"";
DataTable dataTable;
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();//Exception thrown here for large files
dataTable = connection.GetSchema("Tables");
}
int lenght = dataTable.Rows.Count;
string[] worksheets = new string[lenght];
for (int i = 0; i < lenght; i++)
{
worksheets[i] = dataTable.Rows[i]["TABLE_NAME"].ToString();
}
return worksheets;
}
我收到 OleDbException 消息系统资源超出。我没有在循环中调用这个函数,也没有在到达这里之前打开任何其他连接。此代码非常适用于较小的文件。
我的系统有 4Gb RAM。在 Windows 7 64Bit 上运行。 Ace 驱动程序也是 64 位的。
知道可以做些什么来解决这个问题吗?
【问题讨论】:
-
有些奇怪 - 我创建了一个大型 Excel 文件,关闭文件后出现上述错误,但打开文件后,代码运行没有错误。我用的电脑内存确实很小,打开文件后代码跑得很快。
-
@Remou:延迟加载/延迟刷新的情况可能吗?
-
如果您尝试复制..让我知道您需要代码的哪一部分...
-
我已经搞砸了很多,我可以让它工作的唯一方法是导入 Access (Jet) 并引用该文件。请注意,在我打开大 Excel 文件之前,导入不起作用。越来越好奇。
标签: c# excel oledbconnection ms-jet-ace oledbexception