首页 > 解决方案 > 将包含数据的完整 CSV 结构复制到数据表

问题描述

我必须复制完整的 CSV 文件数据及其结构,而无需编写长代码。我已经使用 CSV 来访问数据表,但是在为 SQL Datatase 使用相同的代码时出现错误。

我的 CSV 代码以访问数据表;

Try

            Dim OleDbCnn As New OleDbConnection
            OleDbCnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\menifestogo.mdb"
            OleDbCnn.Open()
            Dim cmd As New OleDbCommand("SELECT * INTO [TransactionsDetails] FROM [Text;Database=d:\;Hdr=No].[csvfile.csv]", OleDbCnn)
            cmd.ExecuteNonQuery()
            OleDbCnn.Close()

            MsgBox("Success..")

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

我的 CSV 到 SQL 数据库的代码

Try

            Dim OleDbCnn As New SqlClient.SqlConnection
            OleDbCnn.ConnectionString = "Server=DESKTOP-AS3NIDD\SQLEXPRESS; DataBase=dbS; Integrated Security=SSPI"
            OleDbCnn.Open()
            Dim cmd As New SqlClient.SqlCommand("SELECT * INTO [TransactionsDetails] FROM [Text;Database=d:\;Hdr=No].[csvfile.csv]", OleDbCnn)
            cmd.ExecuteNonQuery()
            OleDbCnn.Close()

            MsgBox("Success..")
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

得到错误:

无效的对象名称'文本;数据库=d:\;Hdr=No.csvfile.csv'

标签: sqlvb.netms-access

解决方案


坦率地说,如果 SQLServer 可以解析并理解它必须使用 Jet 驱动程序来访问 CSV,我会感到惊讶[Text;Database=d:\;Hdr=No].[csvfile.csv]- Access 可能有效,因为您已经在使用 Jet 驱动程序并且它能够理解该文本是一种方式访问某处文件夹中的文件。Access/Jet 和 SQLServer 有很大不同

通过发出单个 SQL 语句将 CSV 批量加载到 SQLServer 看起来更像:

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.csv'
WITH ( FORMAT='CSV');

这里有很多选择

如果你想创建一个新表,更像这样的东西应该可以

SELECT *
INTO YOUR_NEW_TABLE
FROM 
  OPENROWSET(
    'MSDASQL', 
    'Driver={Microsoft Text Driver (*.txt;*.csv)};DefaultDir=PATH_TO_DIRECTORY_HOLDING_FILE;Extensions=csv;',
    'select * from NAME_OF_CSV_FILE.csv'
  ) csv;

推荐阅读