Прежде всего, я считаю, что ваше соединение неверно, у вас есть файл xlsx, но соединение установлено для xls.
BTW Не уверен, что это проект формы или asp, но обязательно выглядит как проект форм для окон, которые думают о вашем первом теге, указывающем asp.net.
Excel может быть сложным в отношении того, как строка соединения установки, вы хотите, чтобы просто читать, делает первый ряд на листе имена столбцов или данных, есть смешанные данные в столбце и т.д.
Вот отрывок я использовал, чтобы сделать вещи проще с подключением, но предупреждаю, что это не дурак доказательство в том, что вам необходимо установить HDR и IMEX правильно в связи
Imports System.Data.OleDb
Module ExcelOleDbConnections
''' <summary>
''' Creates a connection string on read data from an excel file
''' </summary>
''' <param name="FileName"></param>
''' <param name="Header">Yes if first row is column-names, No if first row is data</param>
''' <param name="IMEX"></param>
''' <returns></returns>
''' <remarks>
''' See following page for clarification on extended properties
''' including IMEX. Ignore C# code.
''' http://www.codeproject.com/Articles/37055/Working-with-MS-Excel-xls-xlsx-Using-MDAC-and-Oled
''' </remarks>
<System.Diagnostics.DebuggerStepThrough()> _
Public Function ExcelConnectionString(
ByVal FileName As String,
Optional ByVal Header As String = "No",
Optional ByVal IMEX As Integer = 1) As String
Dim Builder As New OleDbConnectionStringBuilder
If IO.Path.GetExtension(FileName).ToUpper = ".XLS" Then
Builder.Provider = "Microsoft.Jet.OLEDB.4.0"
Builder.Add("Extended Properties", String.Format("Excel 8.0;IMEX={0};HDR={1};", IMEX, Header))
Else
Builder.Provider = "Microsoft.ACE.OLEDB.12.0"
Builder.Add("Extended Properties", String.Format("Excel 12.0;IMEX={0};HDR={1};", IMEX, Header))
End If
Builder.DataSource = FileName
Return Builder.ToString
End Function
End Module
Пример чтения листа, где первый строка - это данные. Обратите внимание, я использую дополнительные параметры, чтобы последние два использовать значения по умолчанию
Dim dt As New DataTable
' sheet has data in first row
Using cn As New OleDb.OleDbConnection With {.ConnectionString = ExcelConnectionString(Loc)}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn, .CommandText = "select * from [Sheet1$]"}
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
В этом примере мы предполагаем, что первая строка являются имена полей/столбцов
Dim dt As New DataTable
' sheet has column names for first row
Using cn As New OleDb.OleDbConnection With {.ConnectionString = ExcelConnectionString(Loc, "Yes", 0)}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn, .CommandText = "select * from [Sheet1$]"}
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
заселить DataGridView
If dt.Rows.Count > 0 Then
DataGridView1.DataSource = dt
Else
'
' recover e.g. tell user there are no records in this sheet
'
End If
Пример все вместе
Try
Dim Loc As String = IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Param\exceldata.xlsx")
If IO.File.Exists(Loc) Then
Dim dt As New DataTable
' sheet has column names for first row
Using cn As New OleDb.OleDbConnection With {.ConnectionString = ExcelConnectionString(Loc, "Yes", 0)}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn, .CommandText = "select * from [Sheet1$]"}
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
If dt.Rows.Count > 0 Then
DataGridView1.DataSource = dt
Else
'
' recover e.g. tell user there are no records in this sheet
'
End If
End If
Catch ex As Exception
MessageBox.Show("TODO")
End Try
См. Мои примеры форм окон (да, я вижу asp.net в ваших тегах) Excel and OleDb basics to advance operations
_error message happens_, поделитесь этим сообщением об ошибке? – Steve