2

在打开与 Excel 文件的 OLEDB 连接时,我有一个 Windows 服务挂起,如下所示:

using (var connection = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
    + fileName + ";Extended Properties=\"Excel 8.0\""))
{
  connection.Open();
  // start using the connection
}

此代码在作为控制台应用程序运行时运行良好。当我使用 Visual Studio 调试 Windows 服务时,我可以单步执行代码,直到调用 connection.Open()。此时,线程挂起。不会抛出异常。Visual Studio 保持响应,直到我点击“Break All”或“Stop Debugging”按钮。此时,Visual Studio 也会挂起。当我终止该进程时,Visual Studio 再次变得响应。

有谁知道为什么会发生这种情况以及如何解决?

编辑:文件名是绝对路径;该文件是由服务本身编写的。

4

2 回答 2

2

在 Windows 服务中尝试执行此操作失败后,我将业务逻辑提取到单独的控制台应用程序中,然后从 Windows 服务中调用该应用程序。似乎工作正常。

于 2010-01-11T08:38:12.217 回答
0

我不知道为什么会发生这种情况,但是您是否尝试通过尝试打开文件并将其简单地加载到字节数组中来缩小范围 - 以确定问题是否与文件系统/权限/等有关......而不是OLE 数据库?如果您可以打开文件并将其加载到字节数组中,但 OLE DB 仍然挂起,CPU 是否已固定,这表明该文件可能存在 OLE DB 无法处理的问题?

如果您无法使其与 OLE DB 一起使用,您是否考虑过像SpreadsheetGear for .NET这样的第 3 方 xls / xlsx 库?您可以在此处查看实时样本并此处下载免费试用版。

免责声明:我拥有 SpreadsheetGear LLC

于 2010-01-08T16:47:12.873 回答