OLEDB 使用 32 位而不是 64 位

OLEDB using 32bit instead of 64bit

我需要从 Excel 工作表中导入一些数据,但 OleDbConnection 使用的是 32 位版本,因此找不到提供程序。我已经使用 64 位向导导入,一切正常。

已尝试使用以下连接字符串:

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

当我运行这个函数时出现以下错误

您的应用程序是尝试使用 32 位还是 64 位版本的 ACE OLE DB 提供程序取决于您的应用程序是 运行在 32 位还是 64 位进程中运行。 32 位应用程序无法使用 64 位 OLE DB 提供程序,反之亦然。您的应用 运行 是 32 位进程还是 64 位进程取决于项目属性中的目标平台以及 OS 它 运行 所在的平台。

如果目标平台x86那么应用只会运行在32位进程中,这意味着它不会在不支持 32 位进程的 OS 上 运行。

如果目标平台x64,那么该应用将仅运行在64位进程中, 这意味着它不会在不支持 64 位进程的 OS 上 运行。

如果目标平台任何CPU并且首选32位 框被选中,然后应用程序将 运行 在支持它的 OS 上的 32 位进程中,否则在 64 位进程中。

如果目标平台任何CPU并且首选32位 框未选中,则应用程序将 运行 在支持它的 OS 上的 64 位进程中,否则在 32 位进程中。

使用 ACE 有点棘手,因为如果您想支持所有可能的场景,您必须至少以两种不同的方式构建您的项目。问题是绝大多数已经安装了 Office 的人都安装了 32 位版本,这意味着他们将安装 32 位 ACE。要支持这些用户,您需要定位 x86 或定位 Any CPU 并选中 Prefer 32-bit 。但是,如果这样做,您将无法支持安装了 64 位 Office 或独立的 64 位 ACE 的用户,因此您需要为他们进行第二次构建。您需要准确确定您的用户可能需要哪些组合,并确保您的构建能够支持他们。

在您描述的特定情况下,目标平台 x64目标平台[=42] =] 的 Any CPU 并取消选中 Prefer 32-bit 应该可以解决问题,但这对绝大多数64 位 Office 用户 Windows.