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