У меня есть веб-сайт, который позволяет пользователям загружать данные с использованием определенных критериев поиска (страна и даты) в файл CSV. Они выбирают всю информацию из выпадающего списка и JQuery datepicker.Динамически создавать CSV-файл, используя оператор select в C#
Экспорт прекрасно работает для небольших наборов данных, но как только вы пытаетесь загрузить и загружать 10000 строк данных, это занимает очень много времени и может даже превышать тайм-аут!
Я пробовал разные способы сделать это, но я хотел бы придерживаться этого метода из-за ограничений по времени в этом проекте.
Мой код выглядит следующим образом:
using (SqlConnection con = new SqlConnection(cs))
{
if (country.Contains("GB"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * from " + logData + " where country in ('GB') and close_date between '" + fromDate + "' and '" + toDate + "'"))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//Build the CSV file data as a Comma separated string.
string csv = string.Empty;
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csv += column.ColumnName + ',';
}
//Console.Write(cmd);
//Add new line.
csv += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
//Response.Write(row[column.ColumnName].ToString().Replace(",", ";") + ',');
csv += row[column.ColumnName].ToString().Replace(",", ";") + ',';
}
//Add new line.
csv += "\r\n";
}
//Download the CSV file.
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=data.csv");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csv);
Response.Flush();
Response.End();
}
}
}
}
Response.Write (. Строка [column.ColumnName] .ToString() Заменить ("", ";") + '');
csv + = строка [column.ColumnName] .ToString(). Заменить (",", ";") + ',';
Если я использую Response.Write ..., файл загрузки НАМНОГО быстрее, но данные все на одной строке и не включает заголовки. CSV + = строка ... гораздо медленнее, а иногда раз из
Как разделить данные на несколько строк, если я должен был использовать response.write и включают в себя заголовки?
Реальный SQL запрос занимает 2 секунды, чтобы запустить и производит 12231 записей
Использовать строковый построитель вроде этого ...> StringBuilder SB = new StringBuilder(); ... SB.Append (строка [column.ColumnName] .ToString(). Заменить (",", ";")) ; Sb.append (''); ... строковый построитель намного быстрее –