Я хотел бы создать файл csv на основе базового запроса из SQL Server, однако я должен создать имена столбцов в первой строке, а во второй строке - описание столбца, как я могу это сделать? Моя проблема состоит в том, чтобы создать вторую строку, потому что она не определяется запросом, и я не знаю, как продолжить, чтобы сказать, что писать в первых двух строках.
У вас есть примеры?
А пока я написал это:
protected void ExportCSV(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Customers"))
{
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 + ',';
}
//Add new line.
csv += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
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=SqlExport.csv");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csv);
Response.Flush();
Response.End();
}
}
}
}
}
На этом снимке экрана показано, что я бы хотел во второй строке:
описания нет в моей базе данных, но я мог бы поместить его в массив, я понятия не имею, как продолжить создание второй строки
Возможно, стоит опубликовать то, что у вас есть, так как трудно точно понять, в чем заключается ваш вопрос. Например, вы сказали, что не знаете, что писать во второй строке - что в первую очередь?
@ pm_2: он упомянул, что первые - это имена столбцов. Во втором должно быть описание каждого столбца. Это свойство, которое вы можете установить в студии управления sql-server, чтобы описать, что хранится в этом столбце.
к сожалению, вторая строка, которую я должен написать, я не могу изменить базу данных, у меня есть только права на чтение :)
@TimSchmelter, вы можете настроить эти свойства ... Я полагаю, мой вопрос: это то, что он ищет (если да, я считаю, что вы можете получить к нему доступ, используя коллекцию DataColumn.ExtendedProperties) msdn.microsoft.com/en-us/library/…
Не используйте запятую напрямую, используйте ее через переменную среды, чтобы избежать проблем с локализацией.





Мне кажется, вы хотите использовать здесь оператор UNION; Например:
SELECT Hdr1, Hdr2, Hdr3
FROM DUAL
UNION
SELECT 'description1', 'description 2', 'description 3'
FROM DUAL
UNION
SELECT COLUMN1, COLUMN2, COLUMN3
FROM MYTABLE
Обновлено:
С C# вы можете сделать что-то вроде:
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csv += column.ColumnName + ',';
}
//Add new line.
csv += Environment.NewLine;
foreach (DataColumn column in dt.Columns)
{
csv += $"{column.ExtendedProperties["Description"]},";
}
//Add new line.
csv += Environment.NewLine;
Очевидно, это зависит от вашей настройки расширенных свойств - если вы этого не сделали, вам понадобится место для получения описания столбца из
Думаю, что пишу еще и логику C#
отлично, но как мне поставить это во вторую строку?
Вы имеете в виду, куда должен идти этот фрагмент по отношению к остальной части вашего кода?
точно, где именно я должен его положить
Я обновил свой вопрос, чтобы разместить его в правильном месте.
Благодарность! Я хочу проголосовать положительно, но у меня недостаточно очков :(
Я думаю этот пост должен помочь ...