2010-01-08 131 views
2

我有一個Windows服務打開一個OLEDB連接到Excel文件的時候,像這樣的懸掛OLEDB連接到Excel文件時掛起:運行時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再次變得響應。

有誰知道爲什麼發生這種情況,以及如何解決它?

編輯:fileName是一個絕對路徑;該文件是由服務本身編寫的。

+1

是文件名絕對還是相對?由於服務techincally沒有運行目錄。儘管在實踐中,他們通常從C:\ Windows \ system32 \運行。 – TJMonk15

+0

文件名是絕對的,服務可以訪問該文件。實際上,該文件是由服務本身編寫的。 –

+0

Excel 2007格式文件(.xlsx或.xlsm)還是早期的.xls格式文件?我相信Excel 2007格式需要不同的連接字符串 – barrowc

回答

2

不成功試圖做到這一點的Windows服務裏面後,我提取業務邏輯到一個單獨的控制檯應用程序,並調用該應用程序從Windows服務中。似乎工作正常。

+0

您可能需要考慮將其遷移到dll而不是控制檯應用程序。調用控制檯應用程序的Windows服務有一個有趣的味道... – Walter

+1

如果我將它編譯爲一個DLL,然後從該服務鏈接到該DLL,代碼將再次運行在服務進程內,並掛起。我將它提取到一個單獨的控制檯應用程序的原因是,它將在單獨的進程中運行。 –

0

我不知道爲什麼會發生這種情況,但是您是否試圖通過嘗試打開文件並將其加載到字節數組中來嘗試縮小它 - 以確定問題是否與文件系統/權限等有關..而不是OLE DB?如果您可以打開並將文件加載到字節數組中,但OLE DB仍然掛起,那麼CPU是否掛鉤表示可能存在OLE DB無法處理的文件?

如果你不能得到這個與OLE DB一起工作,你有沒有考慮像第三方xls/xlsx庫如?您可以看到現場示例here並下載免費試用here

聲明:我自己的SpreadsheetGear LLC

+0

該文件是由服務本身編寫的。將內容加載到字節數組中是沒有問題的。當線程掛起時,CPU空閒,所以它看起來像一個鎖。這個文件沒有問題,因爲如果我將它作爲控制檯應用程序運行,代碼就可以工作。 –