2012-07-04 148 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註冊表調整要好。 –