我正在做一個使用C#導出和導入數據到.csv
文件的項目。我在導出數據時遇到困難,因此我編寫了下面的代碼,但它不那麼靈活。我想用較少的時間導出它。以下代碼需要更多時間。我將使用查詢從SQL Server中獲取大量數據。如何使從SQL Server到CSV的快速導出數據
public static void ExportPlantData(string channelId)
{
string query = string.Empty;
DataService dataService = new DataService();
DbCommand dataCmd = null;
DataTable contentToExport = new DataTable();
try
{
query = "SELECT * from tablename";
dataCmd = dataService.Database.GetSqlStringCommand(query);
contentToExport = dataService.ExecuteDataTable(dataCmd);
ExportToCSV(contentToExport);
}
}
我從表中提取了大量數據。之後,我將這些數據導出爲.csv
,但它需要很長的時間來使用此代碼導出:
public static void ExportToCSV(DataTable contentToexport)
{
string csvData = string.Empty;
string headers = string.Empty;
foreach (DataRow row in contentToexport.Rows)
{
headers = string.Empty;
foreach (DataColumn column in contentToexport.Columns)
{
csvData += row[column].ToString() + ",";
headers += column.ColumnName + ",";
}
csvData += "\r\n";
headers += "\r\n";
}
string contentToExport = headers + csvData;
string attachment = "attachment; filename=export.csv";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "application/csv";
HttpContext.Current.Response.AddHeader("Pragma", "public");
HttpContext.Current.Response.Write(contentToExport);
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
}
如果沒有業務規則,並且您同樣想要通過select語句獲得的內容導出爲csv,那麼我認爲您應該在所有行的單列中選擇所有列值作爲逗號分隔值。 所以你得到1列多行。然後,您需要遍歷應用程序中的唯一一行。 –
你應該使用一個StringBuilder對象。 –
爲什麼**再次重新發明了車輪?**使用許多**現成的** CSV導出庫中的任何一個,例如[由Josh Close提供的CSVHelper](https://joshclose.github.io/CsvHelper/) –