问题
i have a situation in which i have to inport the Excel sheet or file to my database using vb.net i know the code and the process for doing this but the issue is
- I have 64 bit operating system
- having 32 bit MS Office
and i don't want to change my Configuration from to 86bit due to some othere reason so now what should i do any prefer solution any one face same solution like this
my code is
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
but in this code i got error of
Microsoft.ace.oledb.12.0 not registered on the local machine
回答1:
I solved it by installing 2007 Office System Driver and Microsoft Access Database Engine 2010 Redistributable.Even I'm using 32 bit Office and 64 bit OS and its working well.The download links http://www.microsoft.com/en-in/download/details.aspx?id=13255 and http://www.microsoft.com/en-in/download/confirmation.aspx?id=23734
The connection code i used :
OleDbConnection myConnection = new OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0; " +
"data source='" + path + "';" +
"Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\" ");
回答2:
i solve my problem time ago but i saw many user visiting this Question so i think i should answer for others help in my question i ask that
- I have 64 bit operating system
having 32 bit MS Office so for this we can not sure that what oledb connection version we have to use so for this we have alternate library from Microsoft to integrate ms office products to our applications.
Microsoft.Office.Interop
to download and install this library follow this link Interop
and bellow is my code sample for further help
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
by doing this you will have you excel data in your DataTable and then its on you where you want to save like save it in the sql server or storage area. let me know for further clarification.
回答3:
I solve it by using "Microsoft.Jet.OLEDB.4.0" as below. Hope this help others.
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
来源:https://stackoverflow.com/questions/22473779/microsoft-ace-oledb-12-0-not-registered-on-the-local-machine