2012-10-17 108 views
0

我正在將我的應用程序從Windows窗體更改爲Windows服務。Excel文件上的conn.GetSchema(「表格」)不返回工作表

conn.GetSchema(「Tables」)在兩個代碼庫中的工作方式不同。

在新的代碼庫中,我無法獲得返回的Excel工作表。 conn.GetSchema(「Tables」).Rows.Count是0.我已經雙重檢查了所有的引用,沒有什麼不同。我無法在我的代碼中發現任何其他差異,我認爲它會產生這種效果。任何想法和我可以尋找什麼?

這裏是我的全部功能(是的,我知道我應該使用一個):

Private Function GetWorksheets(FileName As String) As String() 

    Dim rv As List(Of String) 
    Dim conn = New OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;data source=" & FileName & ";Extended Properties=Excel 8.0;") 

    conn.Open() 
    For x As Integer = 0 To conn.GetSchema("Tables").Rows.Count - 1 
     rv.Add(conn.GetSchema("Tables").Rows(x)("TABLE_NAME")) 
    Next x 
    conn.Close() 
    Return rv.ToArray 

End Function 

感謝, 布拉德

回答

1

您需要包括Web服務器(系統的路徑。 Web.HttpContext.Current.Server.MapPath),所以儘量用以下取代「conn將」分配:

Dim conn = New OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;data source=" & System.Web.HttpContext.Current.Server.MapPath(FileName) & ";Extended Properties=Excel 8.0;") 
+0

我不是從Web服務器這樣做,但一個窗口服務。我已經在使用絕對路徑。但是,你讓我找到了解決方案!在早期的代碼中有一個錯誤,我將錯誤的路徑傳遞給文件。我會期待一個異常,但實際上連接打開(conn.state是Open),即使它指向一個不存在的文件。 –

+0

布拉德,看看這個答案:http://stackoverflow.com/questions/2714262/relative-path-issue-with-net-windows-service –