通过VB.net 2010快速将csv文件导入访问数据库

时间:2012-07-04 22:35:08

标签: vb.net ms-access tsv

我在从Tab分隔文件导入大约30,000行数据到Access数据库时,遇到了我想要的速度问题。文件导入是从我编写的VB.net 2010程序管理的。

程序当前循环遍历每一行并为每一行发出一个SQL插入语句。然而,这需要大约2个小时才能完成。如果我使用获取外部数据直接手动将同一文件导入访问,则大约需要30秒。

我在想我可以创建一个链接到MS访问的datagridview,并以某种方式运行本机.net命令将文件导入datagridview然后快速写入数据进行访问,但我不确定是否这样是可能的。

顺便说一下,手动导入不是一个选项,它需要通过各种原因通过vb.net应用程序。

任何人都可以就如何加快速度提出任何建议吗?

由于 西蒙

2 个答案:

答案 0 :(得分:2)

您可以针对MS Access连接运行SQL语句以导入text / csv。要导入新表:

cmd.CommandText =
    "SELECT F1 AS id, F2 AS firstname " &
    "INTO MyNewTable " &
    "FROM [Text;FMT=Delimited;HDR=No;CharacterSet=850;DATABASE=C:\__tmp].table1.csv;"

要导入现有表格:

cmd.CommandText =
    "INSERT INTO MyExistingTable " &
    "SELECT F1 AS id, F2 AS firstname " &
    "FROM [Text;FMT=Delimited;HDR=No;CharacterSet=850;DATABASE=C:\__tmp].table1.csv;"

您还可以将schema.ini文件用于非标准分隔符。 (Exporting data into a pre-formatted fileCreate comma separated file (csv) from access - scheduled daily from windows

答案 1 :(得分:-1)

问题是为什么要使用.Net?如果您使用较新版本的Access,它将在SQL上运行。这允许您使用SQL Bulk Insert。批量插入使SQL中的每个其他数据插入方法都脱掉了。

如果需要操作数据,可以将原始数据批量插入堆表(只是文件中数据的原始转储),然后使用SQL将相关数据更新/移动到正确的表中。