Microsoft.ace.oledb.12.0未在本地计算机上注册

时间:2014-03-18 08:20:45

标签: vb.net excel oledbconnection

我有一种情况,我必须使用vb.net将Excel工作表或文件导入我的数据库我知道代码和执行此操作的过程但问题是

  1. 我有64位操作系统
  2. 拥有32位MS Office
  3. 我不希望将配置从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未在本地计算机上注册

3 个答案:

答案 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)

我很久以前解决了我的问题,但我看到很多用户访问这个问题所以我想我应该回答其他人的帮助 在我的问题中,我问那个

  1. 我有64位操作系统
  2. 拥有32位MS Office 所以为此,我们无法确定我们必须使用哪种oledb连接版本,因此我们有来自Microsoft的备用库,以便将ms office产品集成到我们的应用程序中。

    Microsoft.Office.Interop

  3. 下载并安装此库,请点击此链接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