我在从Tab分隔文件导入大约30,000行数据到Access数据库时,遇到了我想要的速度问题。文件导入是从我编写的VB.net 2010程序管理的。
程序当前循环遍历每一行并为每一行发出一个SQL插入语句。然而,这需要大约2个小时才能完成。如果我使用获取外部数据直接手动将同一文件导入访问,则大约需要30秒。
我在想我可以创建一个链接到MS访问的datagridview,并以某种方式运行本机.net命令将文件导入datagridview然后快速写入数据进行访问,但我不确定是否这样是可能的。
顺便说一下,手动导入不是一个选项,它需要通过各种原因通过vb.net应用程序。
任何人都可以就如何加快速度提出任何建议吗?
由于 西蒙
答案 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 file,Create comma separated file (csv) from access - scheduled daily from windows)
答案 1 :(得分:-1)
问题是为什么要使用.Net?如果您使用较新版本的Access,它将在SQL上运行。这允许您使用SQL Bulk Insert。批量插入使SQL中的每个其他数据插入方法都脱掉了。
如果需要操作数据,可以将原始数据批量插入堆表(只是文件中数据的原始转储),然后使用SQL将相关数据更新/移动到正确的表中。