wcf上的Oledb在使用大型excel文件时存在一些问题

本文关键字:文件 存在 问题 excel 大型 Oledb 上的 wcf | 更新日期: 2023-09-27 18:29:18

以下是故事:

我想把excel表格导入数据库。我在客户端上做了一些准备工作,比如选择文件、正确的工作表和工作表的配置。

完成后,我将文件发送到本地wcf服务器
然后wcf将文件写入临时文件夹(C:''Windows''temp)
我创建了一个oledb连接,并在工作表上执行count(*)命令,这就是它出错的地方。

代码:

            _connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='"Excel 12.0 Xml;HDR=YES'"");
            OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM [" + .SheetName + "]", _connection);
            if (_connection.State == ConnectionState.Closed)
                _connection.Open();
            TotalRows = (int)command.ExecuteScalar();

是的,我在这里没有使用,请不要介意
执行(int)command.ExecuteScalar();时出错
我收到错误:System resource exceeded.。这是一个OleDBException。

我电脑的内存没有被填满,看起来它甚至没有尝试读取文件。它立即崩溃。

关于我试图阅读的文件的一些信息:

  • 它有154k行
  • 它有114列
  • 尺寸为90mb

如果我取其中50k行的子集,它不会崩溃
虽然上面说TotalRows是2536。
一开始我以为这个文件已经损坏了,但事实并非如此,因为这个完全相同的代码在客户端上使用完全相同的文件。

如果我取2500行的子集,一切都很顺利,现在出现了问题
如果我取2600行的子集(不管是哪行),行数仍然是2536。

我的问题:

  • 出了什么问题
  • 谁对错误和不正确的结果负责
  • 为什么它在客户端上工作,但在我的服务器上不工作(同一台机器!)
  • 为什么它不与较小的文件一起崩溃

需要更多信息吗?请留下评论。

更新1:
客户端和服务器都作为32位应用程序运行。

wcf上的Oledb在使用大型excel文件时存在一些问题

也有同样的问题。我正在尝试通过网站读取30000行的excel文件。但我只取8007行的子集。我发现,如果我将"应用程序池标识"更改为"管理员"而不是"网络服务",那么一切都可以。此外,如果我把excel文件转换为.xls,Jet Provider也可以读取3万行。

然后我浏览了论坛,发现了这一点,并尝试使用ExtendedProperties参数IMEX=1的代码,所有30k行都被读取了。