Wcf上的Oledb有一些大型excel文件的问题?

时间:2012-03-28 09:10:52

标签: c# wcf excel oledb large-files

以下是故事:

我想将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位应用程序运行。

1 个答案:

答案 0 :(得分:2)

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

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