Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用32位而不是64位的OLEDB_Sql Server_Vb.net_Oledb - Fatal编程技术网

Sql server 使用32位而不是64位的OLEDB

Sql server 使用32位而不是64位的OLEDB,sql-server,vb.net,oledb,Sql Server,Vb.net,Oledb,我需要从Excel工作表导入一些数据,但OLEDB连接使用32位版本,因此找不到提供程序。我已经使用64位wizzard导入,一切正常 已尝试使用以下连接字符串: Provider=Microsoft.ACE.OLEDB.12.0; 作为整数的公共共享函数ExcelToSqlServer() Dim ds作为新数据集 Dim da作为新的OLEDB数据适配器 Dim conn作为新的OLEDB连接 Dim cnn作为新的SqlConnection 将sqlBC设置为SqlBulkCopy 将m

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

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

Provider=Microsoft.ACE.OLEDB.12.0;
作为整数的公共共享函数ExcelToSqlServer()
Dim ds作为新数据集
Dim da作为新的OLEDB数据适配器
Dim conn作为新的OLEDB连接
Dim cnn作为新的SqlConnection
将sqlBC设置为SqlBulkCopy
将myFileDialog设置为新System.Windows.Forms.OpenFileDialog
Dim xSheet As String=“”
使用myFileDialog
.Filter=“Excel文件|*.xlsx”
.Title=“打开文件”
.ShowDialog()
以
如果myFileDialog.FileName.ToString为“”,则
Dim ExcelFile As String=myFileDialog.FileName.ToString
xSheet=“附带费用”
conn=New-OleDbConnection(“Provider=Microsoft.ACE.OLEDB.12.0;”和“data source=“&ExcelFile&;””和“Extended Properties='Excel 12.0 Xml;HDR=Yes”)
尝试
康涅狄格州公开赛
da=新的OleDbDataAdapter(“从[”&xSheet&“$]”中选择*,康涅狄格州)
ds=新数据集
da.填充(ds)
sqlBC=新的SqlBulkCopy(cnn)
sqlBC.DestinationTableName=“意外事件”
sqlBC.WriteToServer(ds.Tables(0))
康涅狄格州关闭
返回1
特例
MsgBox(“错误:+ex.ToString,MsgBoxStyle.Information,Informacion”)
康涅狄格州关闭
返回-1
结束尝试
如果结束
返回-1
端函数
当我运行此函数时,出现以下错误

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

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

如果目标平台为x64,则应用程序将仅在64位进程中运行, 这意味着它不会在不支持64位进程的操作系统上运行

如果目标平台是任何CPU,并且选中“首选32位”框,则应用程序将在支持它的操作系统上以32位进程运行,否则将以64位进程运行

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

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


在您描述的特定情况下,x64的目标平台或任何CPU的目标平台以及取消选中“首选32位”应该可以做到这一点,但这对64位Windows上的绝大多数Office用户都不起作用。

您好,我在解决方案中更改了目标平台,尽管我收到另一条消息,似乎解决了问题。非常感谢。可能重复的
  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