2013-03-15 152 views
0

我已經嘗試了很多不同的路徑,可以構建一個頁面,允許用戶選擇一個excel文件,然後從該文件讀取數據。到目前爲止,我所得到的只是錯誤。嘗試從VB.Net中的Excel讀取數據時出錯

我最近的錯誤是:「無法更新。數據庫或對象是隻讀的。」

這裏是我的代碼:

Protected Sub Upload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Upload.Click 
    If (testFile.HasFile) Then 
     Dim ds As DataSet 
     Dim strFileType As String = System.IO.Path.GetExtension(testFile.FileName).ToString().ToLower() 

     Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 
     Dim MyConnection As System.Data.OleDb.OleDbConnection 
     MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & testFile.FileName & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=2") 

     ' Select the data from Sheet1 ([in-house$]) of the workbook. 
     MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection) 

     ds = New System.Data.DataSet 
     MyCommand.Fill(ds) - __This is where the error points.__ 
     grvExcelData.DataSource = ds.Tables(0) 

    End If 
End Sub 

爲什麼這被拋出任何想法?我現在只是試圖將數據輸出到一個gridview。後來我需要遍歷每個單元格,但我一次只嘗試一步。

此外,如果有更好的方法來做到這一點,我完全接受它!

謝謝!

回答

0

但是strFileType是您希望打開的文件的擴展名。 (I.E.對於filename.xls,它只是.xls部分)
可能您需要完整的文件名。現在

MyConnection = New System.Data.OleDb.OleDbConnection(_ 
    "provider=Microsoft.Jet.OLEDB.4.0; " & _ 
    "data source=" & testFile.FileName & "; " & _ 
    "Extended Properties=Excel 8.0") 

,爲「更好的一部分」:
你不關閉連接,而這種情況不應該發生。 一個簡單的使用塊將節省您

Using MyConnection = New OleDbConnection(_ 
     "provider=Microsoft.Jet.OLEDB.4.0; " & _ 
     "data source=" & strFileType & "; " & _ 
     "Extended Properties=Excel 8.0") 

     ' Select the data from Sheet1 ([in-house$]) of the workbook. 
     Using MyCommand = New OleDbDataAdapter("select * from [Sheet1$]", MyConnection) 
      Dim ds = New System.Data.DataSet 
      MyCommand.Fill(ds) 
     End Using 
    End Using 

我建議加上Import指令,以避免爲每個單獨的OleDb可變

+0

感謝lenghty命名空間前綴!我做了你建議的更改,但我仍然收到同樣的錯誤:「無法更新,數據庫或對象是隻讀的。」在「MyCommand.Fill(ds)」行? – Blunderfest 2013-03-15 18:43:05

+0

對不起,我現在看到你的testFile可能是FileUpload類型的全局變量。對?在這種情況下,您是否保存過發佈的文件?請參閱MSDN上的[FileUpload.HasFile](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.fileupload.hasfile.aspx)上的示例 – Steve 2013-03-15 18:47:17

+0

我沒有聲明testFile作爲全局變量,它是用戶將文件添加到其中的輸入字段。我需要保存發佈的文件嗎?我正在使用的服務器不允許寫入權限,所以我試圖避免這種情況。我在這裏嘗試了一種不同的方法:[以前的問題](http://stackoverflow.com/questions/15412936/cant-find-referenced-sheet-in-excel-file-while-trying-to-read-from-a -webpage-in/15413972?noredirect = 1#15413972)並沒有得到任何地方,這就是爲什麼我嘗試了不同的方法。 – Blunderfest 2013-03-15 18:53:10

相關問題