我有一個C#.NET程序,每次處理數百萬條記錄,然後將它們存儲在平面文件或SQL Server數據庫中。如何高效地將數百萬條記錄從.NET流式傳輸到SQL Server
當前,要將它們存儲在SQL Server數據庫中,程序會將所有記錄寫入平面文件,然後使用bcp將其導入到SQL Server中。
有沒有一種更有效的方法,可以繞過在導入SQL之前將每條記錄寫入硬盤的需求?
我有一個C#.NET程序,每次處理數百萬條記錄,然後將它們存儲在平面文件或SQL Server數據庫中。如何高效地將數百萬條記錄從.NET流式傳輸到SQL Server
當前,要將它們存儲在SQL Server數據庫中,程序會將所有記錄寫入平面文件,然後使用bcp將其導入到SQL Server中。
有沒有一種更有效的方法,可以繞過在導入SQL之前將每條記錄寫入硬盤的需求?
考慮在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
您也可以將IDataReader傳遞給您,以防您想要傳輸結果。 – usr
謝謝! - 我會研究這個,讓你知道它是如何工作的。順便說一下,一次寫入一個或幾個數據行合理有效嗎?還是應該在寫入服務器之前儘可能多地存儲內存? –
@JeffMH,瓶頸很可能是數據庫和應用程序之間的往返行程,因此包含儘可能多的行數可能是最快的。與所有性能問題一樣,請確保執行一些基準測試。 –
有你看着[SqlBulkCopy](http://msdn.microsoft.com/en- us/library/system.data.sqlclient.sqlbulkcopy.aspx)將數據加載到數據庫中? – GarethD