2013-12-09 239 views
2

我對C#非常陌生(儘管在VB中經驗豐富),並且我想將一些非常大的管道(|)分隔文件導入到我的SQL Server數據庫中。將大文本文件導入到SQL Server數據庫中

我到目前爲止所做的工作是創建一個C#項目(使用SharpDevelop)並添加代碼來掃描具有特定名稱的文本文件的目錄,並根據文件名識別SQL Server中的目標表。我還創建了一個無錯誤運行的SQL連接,但這個連接就像我一樣。

所以我想我應該如何最好地採取這些類型的文件(其中一些是幾千KB的大小,幾乎2GB的大小),並將這些文件導入到SQL Server。這些文本文件也有一個列名稱的行標題列和我希望格式化爲日期的一些列。我還想在導入之前驗證表是否先存在,以便我知道是否創建它。

我是否應該使用某種文件讀取器並按行讀取文件或讀取整個文件?只是不確定最好的方法來解決這個問題。

+3

你是否必須使用C#自己編寫它?您可以查看SSIS(集成服務),它提供了很多功能來輕鬆處理這些情況。 –

+0

將大量數據導入到以前使用[批量插入](http://msdn.microsoft.com/zh-cn/library/ms188365.aspx)的sql server中。我建議你在sql server中存儲一個存儲過程。使用過程中的文件名,目標表等參數進行批量插入。 /編輯SSIS也很好,主要取決於你的數據類型,你需要多長時間導入一次,如果它總是相同的格式 – Koryu

+0

這是一次性導入還是持續的過程?如果一次導入,您可能只需使用SSMS中的數據庫上可用的導入數據任務。如果您需要重複執行此導入過程,那麼我會考慮使用marc_s建議的SSIS。 –

回答

2

查看this post關於使用緩衝流來讀取您的大文本文件。在此之後拆分管道並調用SQL函數應該相對容易。

+0

所以我有這個工作,我唯一的抱怨是,它運行非常緩慢。一個3MB的文本文件表~20分鐘導入。有其他方法可以用來加速嗎?現在我只是一次讀一行並插入。也許我可以一次讀50行,嘗試插入,不確定。 – Baub

+0

你說得對。個人插入陳述將持續下去。查看SqlBulkCopy類以設置批處理插入 - http://msdn.microsoft.com/en-us/library/7ek5da1a(v=vs.110).aspx –

2

BCP將是導入原始文本數據的最快方式。 SSIS是另一種選擇,但它有一些逐行開銷讀數據並通過翻譯器運行。

相關問題