尝试从VB.Net中的Excel读取数据时出错

时间:2013-03-15 18:13:30

标签: vb.net excel oledb

我尝试了许多不同的路由,能够构建一个允许用户选择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。后来我需要循环遍历每个单元格,但我一次尝试一步。

此外,如果有更好的方法,我完全愿意接受它!

谢谢!

1 个答案:

答案 0 :(得分: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变量的lenghty名称空间前缀