2009-09-09 40 views
1

我目前正在開發一個應用程序,它需要用戶選擇的Excel電子表格位置被讀入DataTable,然後存儲在一個sql服務器數據庫從C#打開Excel Spreedsheet時拋出異常,說明文件正在被另一個用戶使用

該應用程序在我的開發環境中完美工作,但是當它部署到我的生產環境中時,將引發異常並顯示以下消息。

Microsoft Jet數據庫引擎無法打開文件'.xls'。它已經由另一個用戶專門打開,或者您需要查看其數據的權限。

我的代碼讀取Excel文件如下:

OleDbConnection objConn = null; 

DataSet objDataset1 = null; 

string fileLocation = GetFileLocation(); 

string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" 
+ "Data Source=" + fileLocation 
+ ";" + "Extended Properties=Excel 8.0;"; 

objConn = new OleDbConnection(sConnectionString); 

objConn.Open(); //This is where the exception is thrown 

OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [Sheet1$]", objConn); 

OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); 

objAdapter1.SelectCommand = objCmdSelect; 

objDataset1 = new DataSet(); 

objAdapter1.Fill(objDataset1, "XLData"); 

DataTable dt = objDataset1.Tables["XLData"]; 

注意應用和Excel文件是在同一領域不同的服務器。

挖掘各種論壇和知識庫時,它會顯示,當「用戶」沒有權限使用該文件時引發異常。雖然不建議所有用戶對該文件的權限都設置爲完全訪問權限。

除了文件權限還有什麼可能導致此異常被拋出?

+0

防火牆設置,文件實際上可能是在使用中,等這是否成功運行在遠程機器上執行(使文件訪問是本地的那臺機器)。 – 2009-09-09 23:44:54

回答

1

不知道這是有益的,但...

錯誤:

The Microsoft Jet database engine cannot open the file '.xls'.

似乎指向一個名爲.xls文件,而不是命名的東西,說myspreadsheet.xlsprodfile.xls

這可能是一個長鏡頭,但你可以做一些調試,以確保文件Jet試圖打開實際存在?可能是由於某種原因,文件名沒有正確構建。

+1

我建議拋出File.Exists檢查,如果找不到,就會拋出FileNotFoundException,只是爲了確保路徑是正確的。 – 2009-09-09 23:50:09

+0

在我點擊提交之前,Opps應該已經回顧了這個問題。 '.xls'實際上是文件的全限定路徑。 正在使用的位置字符串與 相似 \\ serverName \ Tools \ TestFiles \ import.xls – swinaz 2009-09-09 23:54:06

1

殺先前打開Excel進程啓動新進程讀取excel.it將解決你的問題之前。

我寫了一個函數,你可以在打開xls之前調用它。

private void kill_excel_process() 
    {  
     foreach (Process clsProcess in Process.GetProcesses()) 
     { 
      if (clsProcess.ProcessName.Equals("EXCEL")) 
      { 
       clsProcess.Kill(); 
       break; 
      } 
     } 
    } 
相關問題