0

(自答,定时器允许时接受)

我已经构建了一个简单的库来从 XLS/XLSX 文件中导入数据。该代码在我的 WinForms 应用程序中完美运行,但当我从 ASP.Net 运行它时偶尔会引发异常。“偶尔”部分似乎基于文件大小。我的测试文件大约有 16,000 行和 18 列,作为一个 XLSX 文件,总大小约为 4MB。如果我删除行(减少到大约 12,000 行)它可以工作,或者如果我删除列(减少到大约 12)它可以工作,或者这些(14,000x14 等)的某些组合它可以工作。这让我相信我可能在某个地方遇到了内存限制。以下是不起作用的蒸馏代码:

Dim dsn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""c:\test.xlsx"";Extended Properties=Excel 12.0"
Using Con As New System.Data.OleDb.OleDbConnection(dsn)
    Con.Open()'Exception thrown here
    Con.Close()
End Using

我得到的例外是:

外部表不是预期的格式

搜索这一切都在谈论如何让 DSN 正确,因为它可以在桌面上运行,所以我知道我做对了。

我的测试机器是 Windows 7 64 位,安装了Microsoft Access Database Engine 2010 Redistributable - 32 位。(我的机器安装了 Office 2010 32 位,这就是我安装 32 位 ADE 的原因,它不允许您安装 64 位。)我已将 IIS 应用程序池设置为允许我需要的 32 位应用程序让ADE首先工作。我正在运行 v4 框架,据我所知,我的 IIS 设置非常标准。

就像我说的那样,每次我通过 WinForms 应用程序运行代码时,代码都能正常工作,但偶尔会在同一台机器上通过 ASP.net 失败。有任何想法吗?

4

1 回答 1

1

mode好吧,我终于通过向DSN添加一些属性让它在我的机器上运行:

Dim dsn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""c:\test.xlsx"";Extended Properties=Excel 12.0;Mode=Share Deny Write;"
于 2012-04-18T23:21:27.017 回答