[英]how to import huge .csv into sql database?
我想將大約1 gig的巨大.csv文件導入數據庫。
我的應用程序在visual studio 2010中以c#編碼。它在本地運行,不需要在網絡上使用。
我嘗試使用sql緊湊工具箱腳本僅導入25mb導致Visual Studio崩潰。
我嘗試使用stringbuilder
會導致內存不足異常(使用大約4 gig的內存!)然后失敗。
我嘗試將這些文件導入Excel或Access,然后將它們轉換為數據庫也失敗了。
哪些數據庫可以更好地處理我的問題?
另外,我應該使用哪種方法盡可能快地導入它並將其加載到datagridview中?
謝謝你的幫助。
如果CSV文件沒有包含逗號的任何字符串,則可以從SQL直接執行BULK INSERT (如果是,則必須先將分隔符更改為bar( |
)字符。這是最直接的將數據從平面文件獲取到數據庫中的方法,並且不需要任何中間程序,如SSIS或Excel
我經常使用它,它是從外部將數據導入SQL的最快速,最有效的方法。 你的命令看起來像
BULK INSERT MyDatabase.dbo.MyTable
FROM MyFileName
DATAFILETYPE='char',
FIELDTERMINATOR=',',
BATCHSIZE=10000
最常見的策略是將數據加載到工作表中,進行必要的清理/轉換,然后將其插入到實際的目標表中。
如果你真的想用C#來實現這個目標,那么你需要做的是逐行讀取CSV並在移動到下一個之前插入它。
我有類似的情況,我必須閱讀2GB“CSV”(標簽分離)並加載到MSSQL。 這是我如何設置它。
using (FileStream fs = new FileStream(@"C:\file.csv", FileMode.Open, FileAccess.Read, FileShare.None))
using (StreamReader sr = new StreamReader(fs, Encoding.GetEncoding(1252)))
{
if (sr.ReadLine() == null) //Take this out if you don't have a header
{
throw new Exception("Empty file?!");
}
while (sr.Peek() >= 0)
{
String s = sr.ReadLine();
//SPLIT
//INSERT SQL
}
}
SQL Express和標准SQL Server都是您存儲的理想選擇。 至於用於導入數據的內容,請使用SSIS。 在SQL Express或Standard SQL Server實例上創建數據庫后,右鍵單擊該數據庫,然后在“ Tasks
菜單項下,您將看到“ Import Data
選項。 它將指導您選擇數據源(在您的案例中為Excel),然后將其導入數據庫。
然后,在該過程結束時,可以保存該腳本。
您可以在C#中使用SQLBulkImporter對象。 奇跡般有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.