我有一个Windows服务,它在打开到Excel文件的OLEDB连接时挂起,如下所示:
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是一个绝对路径;文件是由服务本身写入的。
发布于 2010-01-11 08:38:12
在Windows服务中尝试执行此操作失败后,我将业务逻辑提取到一个单独的控制台应用程序中,然后从Windows服务中调用该应用程序。似乎工作得很好。
发布于 2010-01-08 16:47:13
我不知道为什么会发生这种情况,但您是否尝试过通过尝试打开文件并将其加载到字节数组中来缩小范围-以确定问题是否与文件系统/权限/等有关……而不是OLE DB?如果您可以打开文件并将其加载到字节数组中,但OLE DB仍然挂起,那么CPU是否已锁定,这将表明文件中可能存在OLE DB无法处理的某些内容?
如果你不能让它与OLE DB一起工作,你有没有考虑过像SpreadsheetGear for .NET这样的第三方xls / xlsx库?您可以查看现场示例here并下载免费试用版here。
免责声明:我拥有SpreadsheetGear有限公司
https://stackoverflow.com/questions/2028706
复制