Question

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

  1. I have 64 bit operating system
  2. 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

Was it helpful?

Solution 2

i solve my problem time ago but i saw many user visiting this Question so i think i should answer my question to help others

  1. I have 64 bit operating system

  2. 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.

OTHER TIPS

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\" ");

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top