我有一种情况,我必须使用vb.net将Excel工作表或文件导入我的数据库我知道代码和执行此操作的过程但问题是
我不希望将配置从86bit更改为86bit由于某些原因 所以现在该怎么办 任何偏好的解决方 任何人都面对这样的解决方案
我的代码是
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim DtSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim fBrowse As New OpenFileDialog
With fBrowse
.Filter = "Excel files(*.xlsx)|*.xlsx|All files (*.*)|*.*"
.FilterIndex = 1
.Title = "Import data from Excel file"
End With
If fBrowse.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fname As String
fname = fBrowse.FileName
MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" & fname & " '; " & "Extended Properties=Excel 8.0;")
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
MyCommand.TableMappings.Add("Table", "CurrencyRate")
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
MyConnection.Close()
For Each Dr As DataRow In DtSet.Tables(0).Rows
Next
MsgBox("Successfully Saved")
End If
但是在这段代码中我得到了错误
Microsoft.ace.oledb.12.0未在本地计算机上注册
答案 0 :(得分:1)
我通过安装2007 Office System驱动程序和Microsoft Access数据库引擎2010 Redistributable解决了这个问题。即使我使用32位Office和64位操作系统并且运行良好。下载链接http://www.microsoft.com/en-in/download/details.aspx?id=13255和{{3} }
我使用的连接代码:
OleDbConnection myConnection = new OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0; " +
"data source='" + path + "';" +
"Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\" ");
答案 1 :(得分:1)
我很久以前解决了我的问题,但我看到很多用户访问这个问题所以我想我应该回答其他人的帮助 在我的问题中,我问那个
拥有32位MS Office 所以为此,我们无法确定我们必须使用哪种oledb连接版本,因此我们有来自Microsoft的备用库,以便将ms office产品集成到我们的应用程序中。
Microsoft.Office.Interop
下载并安装此库,请点击此链接Interop
和下面是我的代码示例以获得进一步的帮助
Dim table As New DataTable("CurrencyRate")
Dim OFD As New OpenFileDialog
Dim strDestination As String
With OFD
.Filter = "Excel Office|*.xls;*.xlsx"
.FileName = ""
If .ShowDialog() <> Windows.Forms.DialogResult.OK Then
Return False
End If
strDestination = .FileName
End With
Dim xlApp As Microsoft.Office.Interop.Excel.Application
Dim xlWorkbook As Microsoft.Office.Interop.Excel.Workbook
Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
Dim xlRange As Microsoft.Office.Interop.Excel.Range
Dim xlCol As Integer
Dim xlRow As Integer
Dim Data(0 To 3) As String
With table
.Clear()
If strDestination <> "" Then
xlApp = New Microsoft.Office.Interop.Excel.Application
xlWorkbook = xlApp.Workbooks.Open(strDestination)
xlWorkSheet = xlWorkbook.ActiveSheet()
xlRange = xlWorkSheet.UsedRange
If xlRange.Columns.Count > 0 Then
If xlRange.Rows.Count > 0 Then
For xlRow = 2 To xlRange.Rows.Count 'here the xlRow is start from 2 coz in exvel sheet mostly 1st row is the header row
For xlCol = 1 To xlRange.Columns.Count
Data(xlCol - 1) = xlRange.Cells(xlRow, xlCol).text
Next
.LoadDataRow(Data, True)
Next
xlWorkbook.Close()
xlApp.Quit()
KillExcelProcess()
End If
End If
Else
MessageBox.Show("Please Select Excel File", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End With
通过这样做,您将获得DataTable中的数据,然后将其保存在您要保存的位置,例如将其保存在SQL Server或存储区域中。
让我知道进一步澄清。
答案 2 :(得分:0)
我通过使用以下“ Microsoft.Jet.OLEDB.4.0”来解决此问题。希望这对其他人有帮助。
Public OledbString32Bit As String = "Provider=Microsoft.ACE.OLEDB.12.0;" ' 32 Bit
Public OledbString64Bit As String = "Provider=Microsoft.Jet.OLEDB.4.0;" ' 64 Bit
For value As Integer = 0 To 1
vCNNstring = OledbString & _
"Data Source= " & vPath & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"""
ExcelCNN = New System.Data.OleDb.OleDbConnection(vCNNstring)
ExcelCMD = New System.Data.OleDb.OleDbDataAdapter(vSQL, ExcelCNN)
If SheetName = "Sheet2" Then
Dim a As Integer = 0
End If
Try
ExcelCNN.Open()
Exit For
Catch ex As Exception
' If using Default OledbString32Bit not work , change to use OledbString64Bit and save for further call
OledbString = OledbString64Bit
If value = 1 Then
MsgBox("Error in mc_ExcelTableToDataTable using : " & OledbString & ", Error : " & ex.ToString())
End If
End Try
Next