通过OleDb打开XLSX文件在WinForms中工作,但并不总是通过ASP.Net

时间:2012-04-18 21:58:42

标签: asp.net vb.net excel-2007

(自我答案,将在计时器允许时接受)

我已经构建了一个简单的库来从XLS / XLSX文件导入数据。代码在我的WinForms应用程序中运行完美,但是当我从ASP.Net运行它时偶尔会抛出异常。 “偶尔”部分似乎基于文件大小。我的测试文件大约是16,000行和18列,总共大约4MB作为XLSX文件。如果我删除行(大约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正确,因为它在桌面上运行我知道我已经做对了。

我的测试计算机是安装了Microsoft Access Database Engine 2010 Redistributable - 32 bit的Windows 7 64位。 (我的机器安装了Office 2010 32位,这就是为什么我安装了32位ADE,它不会让你安装64位。)我已经设置了我的IIS应用程序池以允许我需要的32位应用程序让ADE首先发挥作用。我正在运行v4 Framework,据我所知,我的IIS设置非常标准。

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

1 个答案:

答案 0 :(得分:1)

好吧,我终于通过向DSN添加了一些mode属性来使用我的计算机:

Dim dsn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""c:\test.xlsx"";Extended Properties=Excel 12.0;Mode=Share Deny Write;"