使用 VB.Net 将我的 CSV 文件导入到我的 Access DB

Using VB.Net to import my CSV file to my Access DB

我正在使用以下代码将 CSV 文件导入到我的 Access 数据库中。我有几个问题。

    Con.Open()
    Dim strSqlCommand = "SELECT F1 AS id, F2 AS firstname " &
                        "INTO MyNewTable " &
                        "FROM [Text;FMT=Delimited;HDR=No;CharacterSet=850;DATABASE=" & GlobalVariables.strDefaultDownloadPath & "].Airports.csv;"
    Dim sqlCommand = New System.Data.OleDb.OleDbCommand(strSqlCommand, Con)
    sqlCommand.ExecuteNonQuery()
    Con.Close()

如何将字符集更改为 UTF-8?如果我输入 utf8 而不是 850,则会出现错误。

此外,我的 CSV 文件的第一行包含列名。我可以修改上面的代码以考虑到这一点吗?

此致,

安德鲁

您可能 运行 尝试同时导入和 select 遇到麻烦,一方面,您可能不希望将数据类型转换为 Access。为此,您将需要 2 个连接和 SQL 字符串到 select 从另一个插入到另一个。

连接字符串需要如下所示:

 "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp\Tmp;Extended Properties='TEXT;HDR=Yes;FMT=Delimited;CharacterSet=ANSI'"

请注意,仅列出了路径,Extended Properties 包含在刻度中。如果第一行有 headers/field 个名字,那么 HDR=Yes 将在结果集中跳过它们。将字段名作为第一行的好处之一是 OleDB 会将它们用作列名(不需要 F1 As foo, F2 As bar;事实上这将失败,因为它们已从 F1、F2 重命名...)。

要从 CSV 中读取的SQL:

 "SELECT * FROM filename.csv"

有几种处理方法。您可以使用 reader 一次读取一行以将它们插入到 Access 数据库中。这可能更简单:将 CSV 中的所有数据放入 DataTable 并使用它插入到 Access:

Private myDT As DataTable    ' form level variable

...
Dim csvStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp\Tmp;Extended Properties='TEXT;HDR=Yes;FMT=Delimited;CharacterSet=ANSI'"
Dim csvSQL = "SELECT * FROM Capitals.csv"    ' use YOUR file name

Using csvCn = New OleDbConnection(csvStr),
         cmd As New OleDbCommand(csvSQL, csvCn)

    Using da As New OleDbDataAdapter(cmd)
        myDT = New DataTable
        da.Fill(myDT)
    End Using
End Using

For Each r As DataRow In myDT.Rows
    'ToDo: INSERT INTO Access
Next

Connection、Command 和DataAdapter 都是资源,所以它们在USING 块中,以便在我们使用完它们时处理它们。 myDT 将有一个 Rows 的集合,每个集合都有一个 Items 的集合,表示来自 CSV 的字段。只需遍历将所需项目添加到 Access DB 的行。

您很可能需要将相同的数据类型从 String 转换为 Integer 或 DateTime 等。

关于 UTF8 的问题 - 你可以使用 Codepage identifier。如果您将它从连接字符串中删除,它将使用注册表中可能也有效的任何内容。对于 UTF8 使用 CharacterSet=65001.