【问题标题】:OLEDB using 32bit instead of 64bitOLEDB 使用 32 位而不是 64 位
【发布时间】:2019-04-19 04:30:16
【问题描述】:

我需要从 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

运行此函数时出现以下错误

【问题讨论】:

标签: sql-server vb.net oledb


【解决方案1】:

您的应用尝试使用 32 位还是 64 位版本的 ACE OLE DB 提供程序取决于您的应用是在 32 位还是 64 位进程中运行。 32 位应用程序不能使用 64 位 OLE DB 提供程序,反之亦然。您的应用是在 32 位还是 64 位进程中运行取决于项目属性中的目标平台及其运行的操作系统。

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

如果 Target Platformx64 那么应用程序将只能在 64 位进程中运行, 这意味着它不会在不支持 64 位进程的操作系统上运行。

如果 Target PlatformAny CPU 并且选中了 Prefer 32-bit 框,则应用程序将以 32-bit 运行在支持它的操作系统上处理,否则在 64 位进程中处理。

如果 Target PlatformAny CPU 并且未选中 Prefer 32-bit 框,则应用程序将以 64-支持它的操作系统上的位进程,否则在 32 位进程中。

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

在您描述的特定情况下,x64Target PlatformAny CPUTarget Platform > 并取消选中 Prefer 32-bit 应该可以解决问题,但这不适用于 64 位 Windows 上的绝大多数 Office 用户。

【讨论】:

  • 嗨,我更改了解决方案的目标平台,尽管我收到另一条消息,它似乎已经解决了问题。谢谢!
猜你喜欢
  • 2016-07-13
  • 2011-03-10
  • 2012-12-03
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 2022-01-18
  • 1970-01-01
相关资源
最近更新 更多