簡體   English   中英

如何將巨大的.csv導入sql數據庫?

[英]how to import huge .csv into sql database?

我想將大約1 gig的巨大.csv文件導入數據庫。

我的應用程序在visual studio 2010中以c#編碼。它在本地運行,不需要在網絡上使用。

我嘗試使用sql緊湊工具箱腳本僅導入25mb導致Visual Studio崩潰。

我嘗試使用stringbuilder會導致內存不足異常(使用大約4 gig的內存!)然后失敗。

我嘗試將這些文件導入Excel或Access,然后將它們轉換為數據庫也失敗了。

哪些數據庫可以更好地處理我的問題?

  • SQL Express
  • SQL Compact
  • 本地SQL Server數據庫

另外,我應該使用哪種方法盡可能快地導入它並將其加載到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM