我有一個遠程SQL服務器。我想在本服務器中創建一個本地所有表的副本。我不關心本地使用的文件格式,我正在尋找從SQL服務器獲取數據到文件中的最快方法。 (注:服務器端備份是不是一種選擇)將SQL服務器表寫入文件的快速方法
這是我目前的做法:
步驟1。創建一個閱讀器和讀取所有數據爲對象
while (reader.Read()) {
var fieldCount = reader.FieldCount;
for (int i = 0; i < fieldCount; i++) {
objects.Add(reader.GetValue(i));
}
}
步驟2的名單。轉換對象爲字符串
List<string> test = new List<string>();
foreach (var o in objects) {
test.Add(o.ToString());
}
步驟3。寫字符串到(CSV)文件
foreach (var s in test) {
backupFile.Write("\"");
backupFile.Write(s);
backupFile.Write("\";");
}
我已經測量的這些3個步驟的性能:
- 步驟1需要3秒
- 步驟2需要2.8秒
- 步驟3需要0.8秒
我正在尋找一種方法來加快步驟2。有沒有更快的方式讓這些對象到文件? (不必是一個文本文件,二進制本地數據庫文件的也行。)
你很可能做在T-SQL查詢的操作,以便它返回一切CSV格式,而不必去通過在C#中的每個記錄。 – Alexandre 2012-02-22 15:37:40
爲什麼不循環一次數據,並且在您查詢每行時進行字符串轉換和文件寫入? – mbeckish 2012-02-22 15:39:49
我的猜測是最快的機制是使用SQL Server的[批量導出功能(http://msdn.microsoft.com/en-us/library/ms175937.aspx)。有一個bcp.exe實用程序,它似乎完全符合你想要做的事情。 – 2012-02-22 15:42:29