打开与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保持响应,直到我点击“全部中断”或“停止调试”按钮。那时,Visual Studio也挂起了。当我终止进程时,Visual Studio会再次响应。
有谁知道为什么会这样,以及如何解决它?
编辑:fileName是绝对路径;该文件由服务本身编写。
答案 0 :(得分:2)
在Windows服务中尝试执行此操作失败后,我将业务逻辑解压缩到单独的控制台应用程序中,并从Windows服务中调用该应用程序。似乎工作正常。
答案 1 :(得分:0)
我不知道为什么会发生这种情况,但您是否尝试通过尝试打开文件并将其加载到字节数组来缩小范围 - 以确定问题是否与文件系统/权限/等有关。而不是OLE DB?如果您可以打开文件并将其加载到字节数组中,但OLE DB仍然挂起,那么CPU是否挂起,这表明OLE DB无法处理的文件可能存在某些内容?
如果你无法使用OLE DB,你是否考虑过像SpreadsheetGear for .NET这样的第三方xls / xlsx库?您可以查看实时样本here并下载免费试用here。
免责声明:我拥有SpreadsheetGear LLC