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

时间:2015-02-20 12:51:40

标签: sql vb.net csv

我使用以下代码将CSV文件导入Access DB。我只有几个问题。

    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文件的第一行包含列名称。我是否可以修改上述代码以将其纳入帐户?

此致

安德鲁

1 个答案:

答案 0 :(得分:1)

您可能会在尝试导入并立即选择所有内容时遇到麻烦,但有一件事您可能不希望将数据类型转换为Access。为此,您将需要2个连接和SQL字符串来相互选择以插入另一个。

连接字符串需要看起来像这样:

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

请注意,仅列出路径,并将Extended Properties括在刻度中。如果第一行包含标题/字段名称,则HDR=Yes将在结果集中跳过它们。将字段名称作为第一行的好处之一是OleDB将它们用作列名称(不需要F1 As foo, F2 As bar;实际上这将失败,因为它们已经从F1,F2重命名...)。

要从CSV中读取的SQL:

 "SELECT * FROM filename.csv"

有几种方法可以处理它。您可以使用阅读器一次读取一行以将其插入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的集合,每个集合都有一个代表CSV中字段的Items集合。只需循环遍历将所需项添加到Access DB的行。

您很可能必须执行从String到Integer或DateTime等的相同数据类型转换。

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