2015-03-30 61 views
0

所以我使用C#和Visual Studio 2013.我目前有一個導入程序,它使用System.Data.OleDb連接到MS Access數據庫和System.Data.SqlClient爲Sql Server連接。從MS Access導入到大型數據集的SQL Server的方法

我最初做的是我會從MS Access讀取數據並將數據存儲在DataTable中,並將DataTable中的數據存儲到SQL Server中。它一直很好,直到我終於碰到了一個有大約30個奇數列和近100萬行的表格,並且我得到了OutOfMemoryException。

所以現在我試圖想辦法解決。我想在我嘗試加載到DataTable之前設置行計數檢查MS Access表,如果它是一定數量的行或更高我打算試圖寫入到外部文件,然後執行導入文件。

所以我問的是誰知道我可以怎麼做呢?只有我見過的解決方案使用Interop,我聽說你不想在代碼中使用互操作,因爲它的速度很慢,而且不可靠。我試圖從MS Access進入一個.csv或.txt文件,但如果一個表沒有主鍵我不知道如何去迭代一個表,如果它不是目前在一個數據表。

+0

你有沒有看過如何將Access連接到一個Sql Server表..這可以很容易地完成你有沒有嘗試過任何谷歌搜索..我知道這是可能的,因爲我已經這樣做了很多次..也可以這也可以基於特定的記錄數或記錄數量塊來完成。 也查找如何使用DTS或SSIS – MethodMan 2015-03-30 18:32:36

+0

然後我會建議尋找SSIS,或者寫一些查詢,您可以從Access中插入數據進入SQL仍然是你嘗試谷歌搜索..? – MethodMan 2015-03-30 18:35:29

+0

我不想在MS Access上保存數據。 SQL Server提供數據備份,安全性,更多的存儲等等。所以我不想做一個鏈接,它仍然在Access上,但在SQL Server上可以查看...我提到我知道如果有一個塊PK,但是如果沒有PK,我不知道如何在一個表格的某個時間段沒有像DataTable那樣。在這種情況下,MS Access表格大到要存儲在DataTable中... – user3003304 2015-03-30 18:35:34

回答

2

如果您正在進行大數據導入,您可以使用和OleDbReader。當使用OleDbReader時,它不會影響您的內存,因爲您一次只能讀取一條記錄來插入另一個數據庫。

它可能需要稍長的時間,但會確保在沒有OutOfMemory錯誤的情況下完成。

+0

我需要一些時間來測試這個,但這聽起來不錯,謝謝。 – user3003304 2015-03-30 18:51:03

+0

之前在幾個項目中完成它,當我遇到同樣的問題時。應該管用 :) – 2015-03-30 18:53:07

相關問題