OLEDB использует 32 бита вместо 64 бита - PullRequest
1 голос
/ 19 апреля 2019

Мне нужно импортировать некоторые данные из листа Excel, но OleDbConnection использует 32-битную версию, поэтому он не может найти поставщика. Я уже импортировал с помощью 64-битной Wizzard и все работает нормально.

Уже пробовал использовать следующую строку подключения:

Provider=Microsoft.ACE.OLEDB.12.0;
  Public Shared Function ExcelToSqlServer() As Integer

        Dim ds As New DataSet
        Dim da As New OleDbDataAdapter

        Dim conn As New OleDbConnection



        Dim cnn As New SqlConnection
        Dim sqlBC As SqlBulkCopy

        Dim myFileDialog As New System.Windows.Forms.OpenFileDialog
        Dim xSheet As String = ""

        With myFileDialog
            .Filter = "Excel Files |*.xlsx"
            .Title = "Open File"
            .ShowDialog()
        End With

        If myFileDialog.FileName.ToString <> "" Then
            Dim ExcelFile As String = myFileDialog.FileName.ToString
            xSheet = "Incidentes"

            conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "data source=" & ExcelFile & "; " & "Extended Properties='Excel 12.0 Xml;HDR=Yes'")

            Try
                conn.Open()
                da = New OleDbDataAdapter("SELECT * FROM  [" & xSheet & "$]", conn)
                ds = New DataSet
                da.Fill(ds)

                sqlBC = New SqlBulkCopy(cnn)
                sqlBC.DestinationTableName = "Incidentes"
                sqlBC.WriteToServer(ds.Tables(0))
                conn.Close()
                Return 1
            Catch ex As Exception
                MsgBox("Error: " + ex.ToString, MsgBoxStyle.Information, "Informacion")
                conn.Close()
                Return -1
            End Try
        End If
        Return -1
    End Function

Я получаю следующую ошибку при запуске этой функции 1

1 Ответ

2 голосов
/ 19 апреля 2019

Пытается ли ваше приложение использовать 32-разрядную или 64-разрядную версию поставщика ACE OLE DB, определяется тем, выполняется ли ваше приложение в 32-разрядном или 64-разрядном процессе.32-разрядное приложение не может использовать 64-разрядный поставщик OLE DB и наоборот.Работает ли ваше приложение в 32-разрядном или 64-разрядном процессе, зависит от целевой платформы в свойствах проекта и операционной системы, в которой оно выполняется.

Если Целевая платформа равна x86 , тогда приложение будет работать только в 32-битном процессе, что означает, что оно не будет работать в ОС, которая не поддерживает 32-битные процессы.

Если Target Platform равно x64 , тогда приложение будет работать только в 64-битном процессе, что означает, что оно не будет работать в ОС, которая не поддерживает 64-битные процессы.

Если Целевая платформа - это Любой ЦП и флажок Предпочитать 32-битный установлен, затем приложение будет запускаться в 32-битном процессе в ОС, которая его поддерживает, ив 64-битном процессе иначе.

Если Target Platform равен Любой ЦП и поле Prefer 32-bit не отмечено, топриложение будет работать в 64-разрядном процессе в операционной системе, которая его поддерживает, и в 32-разрядном процессе в противном случае.

Использование ACE является простымужасно сложно, потому что, если вы хотите поддержать каждый возможный сценарий, вы должны построить свой проект как минимум двумя различными способами.Проблема заключается в том, что подавляющее большинство людей, у которых уже установлен Office, установят 32-разрядную версию, а это значит, что у них будет установлена ​​32-разрядная версия ACE.Чтобы поддерживать этих пользователей, вам нужно настроить таргетинг на x86 или на целевое Любой ЦП и установить Предпочитать 32-битный .Если вы сделаете это, вы не сможете поддерживать пользователей, которые установили 64-битный Office или автономный 64-битный ACE, поэтому вам потребуется вторая сборка для них.Вам необходимо точно определить, какие комбинации могут потребоваться вашим пользователям, и убедиться, что у вас есть сборка, которая будет их поддерживать.

В указанном вами конкретном случае Target Platform из x64 или еще Target Platform из Любой процессор и снятие отметки Предпочитают 32-битные , должны работать, но это не будет работать для подавляющего большинствапользователей Office в 64-битной Windows.

...