2012-07-04 113 views
1

我在从导入的Access数据库中导入大约30,000行数据从Tab分隔文件中获取速度时出现问题。文件导入是从我编写的VB.net 2010程序管理的。通过VB.net 2010快速导入csv文件到access数据库

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

我在想,我可能能够创建一个datagridview链接到MS访问,并以某种方式运行本地.net命令将文件导入到datagridview,然后快速写入数据访问,但我不知道如果这个有可能。

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

任何人可以提供任何建议,我可以如何加快速度?

感谢 西蒙

+1

那么,没有看到你到目前为止所做的任何事情,这是非常困难的帮助。请张贴循环代码。 – Steve

回答

-1

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

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

+0

我正在为那些不擅长计算机/软件的用户编写一个应用程序。由于我不会在那里,当他们将使用该软件时,我需要将所有内容放在一个易于使用的前端,并在代码中为他们完成所有艰苦的工作。我还需要在导入数据后处理这些数据,通过VB完成这些操作,让用户只需点击一下即可完成所有工作。 – PrestonDocks

+0

虽然.Net可以很好地管理导入,但SQL在生活中的主要目的是非常有效地处理大块数据。如果您花一些时间来学习SQL的能力,那么您很可能会发现您可以在存储过程和T-SQL中执行90%的预占。 – pingoo

+0

访问SQL与T-SQL仍然非常不同。 Access SQL不支持'BULK INSERT'。 –

2

您可以针对您的MS Access连接运行一条SQL语句来导入文本/ 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

+0

@gordonthompson在我看来,这是一个太大的变化。 – Fionnuala

+0

够公平的。当然,使用[schema.ini](http://msdn.microsoft.com/en-us/library/ms709353%28VS.85%29.aspx)文件比HKLM注册表调整要好。 –