2012-11-10 53 views
0

我這樣做是爲了閱讀:我無法從Excel文件中讀取並使用asp.net在c#中存儲到數據庫中?

private bool writetoven(string xlspath) 
{ 
    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString) 


    try 
    { 
     OleDbCommand ocmd = new OleDbCommand("select * from [Sheet1$]", excelConnection); 
     excelConnection.Open(); 
     OleDbDataReader odr = ocmd.ExecuteReader(); 
     string vcode = ""; 
     string pswd = ""; 
     string vname = ""; 

     while (odr.Read()) 
     { 
      vcode = valid(odr, 0); 
      pswd = valid(odr, 1); 
      vname = valid(odr, 2); 

      insertdataintosql(vcode,pswd,vname); 
     } 
     excelConnection.Close(); 
     return true; 
    } 
    catch (DataException) 
    { 
     return false; 
    } 
    finally 
    { 
     lblmsg4.Text = "Data Inserted Sucessfully"; 
    } 
} 

和我的連接字符串是這樣的:

excelConnectionString = "provider=Microsoft.jet.oledb.4.0;data source=" + 
         filepath1 + 
         ";extended properties='Excel 8.0;HDR=YES;'"; 

,但我得到一個錯誤

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

Line 1574:OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
Line 1575:
Line 1576:excelConnection.Open(); 1577
線:1578
線:

好像該文件仍然是開放的,但它不是,我已經檢查正在運行的進程,它不存在

現在我該怎麼辦? ...我的Excel工作表被關閉,但我收到此錯誤

我沒有在我的COM Microsoft Access是可以成爲一個問題

被這個問題事做,我是我FileUpload控件使用?

+0

是否有什麼特別的原因讓你調用'excelConnection.Open();'**兩次**?此外,我會檢查**任務管理器**如果有任何_Excel在background_(不可見)中運行的實例打開您的文件! –

+0

是的,這是我的錯對不起...但我刪除了,仍然無法工作 – Drone

+0

是這個問題是我用我的文件上傳控制,我使用? – Drone

回答

1

確保您的Web應用程序運行的帳戶對文件具有權限。

此外,由於您沒有使用路徑,只是一個文件名,它可能不會找到它所在的文件。該文件位於相對於您的Web應用程序的位置?

System.IO.File.ReadAllBytes(filepath1)是成功還是失敗?

既然你正在處理一個文件上傳:

用戶從他們的計算機通過瀏覽器上傳,文件傳送到在後響應您的服務器。請參閱:http://blog.divergencehosting.com/2009/03/12/upload-read-parse-file-aspnet/

即使您擁有完整路徑,也無法從服務器訪問用戶計算機上的文件。瀏覽器向您發送uploadControl.PostedFile.InputStream;中的文件副本,其中up​​loadControl是您的asp:FileUpload控件的名稱。

然後,您需要將此流保存到服務器上的文件位置,並將此完整路徑提供給連接字符串。

如果您使用類似EPPlus的文件來讀取文件而不是OleDbConnection,則可以使用內存中的流而不是先保存文件。

+0

System.IO.File.ReadAllBytes(filepath1)失敗 – Drone

+0

是的,我只是想通了,我需要整個路徑名..可以告訴我如何獲得fileuploder控制的完整路徑?我只得到文件名 – Drone

+0

嘗試設置文件名1到@「D:\ Vendor.xls」,那麼如果這是它的位置。我懷疑你的網絡應用程序是這樣的,Web應用程序不會知道Vendor.xls不在Web應用程序目錄中,而是在D的根目錄中: – AaronLS

2

那麼,錯誤說:

無法打開文件「。

所以幾乎好像您的Excel連接字符串是無效的 - 它沒有在那裏有一個有效的Excel文件名!

何時何地你設置 Excel連接字符串?

您在當時使用的filepath1是否有效?

它是否包含有效的Excel文件名?

更新:爲什麼我不明白的是:你在xlspath作爲參數傳遞給你的方法 - 然而,你似乎沒有在任何地方使用該xlspath - 肯定不是來連接在一起的excelConnectionString ....

private bool writetoven(string xlspath) 
{ 
    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString) 

你可以把一個斷點在這條線 - 什麼是您的excelConnectionString樣子 - 只是在你創建連接?難道xlspath包含vendor.xls - 但你的Excel連接字符串甚至從未設置爲該值?

+0

我使用的是按鈕單擊...我應該給連接字符串在我的檔案還我正在上傳.xls文件 – Drone

+0

我得到的filepath1是:'Vendor.xls' – Drone

+0

我沒有微軟在我的電腦訪問是多數民衆贊成的問題? – Drone

1

您的excel文件在Microsoft Excel中打開。關閉Excel窗口,一切都會好起來的。

+0

我的excel窗口關閉了...我沒有任何打開的excel文件 – Drone

+0

@Drone好吧,這是我的例子一百次。 –

相關問題