以下是故事:
我想将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。
我的电脑内存没有被填满,看起来它甚至都没有尝试读取文件。它立即崩溃。
有关我尝试阅读的文件的一些信息:
如果我采用50k行的子集,它不会崩溃
虽然它说TotalRows是2536.
起初我虽然文件已损坏,但事实并非如此,因为完全相同的代码在客户端上使用完全相同的文件。
如果我采用2500行的子集,一切顺利,现在有问题 如果我采用2600行的子集(无论哪个行无关紧要),行数仍然是2536。
我的问题:
需要更多信息?请发表评论。
更新1:
客户端和服务器都作为32位应用程序运行。
答案 0 :(得分:2)
有同样的问题。我试图通过网站读取30k行的excel文件。 但我只占用了8007行的子集。 我发现如果我将应用程序池标识更改为管理员而不是网络服务,那么一切正常。此外,如果我将我的excel文件转换为.xls,Jet Provider也可以读取30k行。
然后我浏览论坛,发现并尝试使用ExtendedProperties参数IMEX = 1的代码,并读取所有30k行。