2012-06-17 79 views
1

我有一個C#.NET程序,每次處理數百萬條記錄,然後將它們存儲在平面文件或SQL Server數據庫中。如何高效地將數百萬條記錄從.NET流式傳輸到SQL Server

當前,要將它們存儲在SQL Server數據庫中,程序會將所有記錄寫入平面文件,然後使用bcp將其導入到SQL Server中。

有沒有一種更有效的方法,可以繞過在導入SQL之前將每條記錄寫入硬盤的需求?

+0

有你看着[SqlBulkCopy](http://msdn.microsoft.com/en- us/library/system.data.sqlclient.sqlbulkcopy.aspx)將數據加載到數據庫中? – GarethD

回答

5

考慮在System.Data.SqlClient名稱空間中使用SqlBulkCopy類。您可以使用它像這樣:

using (var conn = new SqlConnection(connectionString)) 
using (var bulkCopy = new SqlBulkCopy(conn)) 
{ 
    conn.Open(); 
    { 
     bulkCopy.DestinationTableName = "dbo.MyTable"; 
     DataTable dt = BuildMyData(); 
     try 
     { 
      bulkCopy.WriteToServer(dt); 
     } 
     catch (Exception ex){Console.WriteLine(ex.Message);} 
    } 
} 

WriteToServer方法重載,將接受3種不同PARAM數據類型:

  • DataRow[]
  • DataTable
  • IDataReader
+0

您也可以將IDataReader傳遞給您,以防您想要傳輸結果。 – usr

+0

謝謝! - 我會研究這個,讓你知道它是如何工作的。順便說一下,一次寫入一個或幾個數據行合理有效嗎?還是應該在寫入服務器之前儘可能多地存儲內存? –

+2

@JeffMH,瓶頸很可能是數據庫和應用程序之間的往返行程,因此包含儘可能多的行數可能是最快的。與所有性能問題一樣,請確保執行一些基準測試。 –

相關問題