我正在做一个使用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/) –