我尝试了许多不同的路由,能够构建一个允许用户选择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 :(得分: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名称空间前缀