C # SQL форматирование экспорта - PullRequest
2 голосов
/ 15 декабря 2009

У меня проблемы с настройкой этого кода для экспорта текста в нужный мне формат, любые советы были бы хорошими.

Сценарий: у меня listBox, заполняемый из SQL-запроса. Этот listBox имеет кнопку для заполнения listBox2. Имя столбцов - это те столбцы, которые выбраны из списка1, а данные - это соответствующие данные. Мне удалось установить этот формат в наборе данных, но мне пришлось изменить его на массивные базы данных.

У меня проблемы с форматированием кода набора данных в этот код потока. Мне нужно экспортировать в следующем формате.

Column name|Column name|Column name|Column name|Column name|Column name|

Данные | Данные | Данные | Данные | Данные | Данные | Данные | Данные | Данные | Данные | Данные | Данные | Данные

SqlConnection con = new SqlConnection("Data Source=" + server + ";Initial Catalog=" + database + ";Integrated Security=" + security);
con.Open();
using (FileStream strm = new FileStream(exportfile, FileMode.Create))
{
    using (StreamWriter writer = new StreamWriter(strm))
    {
        SqlCommand cmd = new SqlCommand(sql, con);
        IDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            writer.Write(rdr[0].ToString() + "|" + rdr[1].ToString());
        }
    }

Это код набора данных, который отлично экспортируется:

DataTable tbltarget = dataset.Tables[0];
string output_text =
    tbltarget.Columns.Cast<DataColumn>().ToList()
    .Select(col => col.ColumnName)
    .Aggregate((current, next) => current + "|" + next) + "\r\n"
    +
    tbltarget.Rows.Cast<DataRow>().ToList()
    .Select(row => row.ItemArray.Aggregate((current, next) => current.ToString() + "|" + next.ToString().Replace("\n", "")))
    .Cast<string>().Aggregate((current, next) => current + "\r\n" + next);
File.WriteAllText(@"C:\InPrep\" + textBox1.Text + "\\CI\\cnr.txt", output_text);

Обновленный код:

using (FileStream strm = new FileStream(exportfile, FileMode.Create))
{
    using (StreamWriter writer = new StreamWriter(strm))
    {
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataReader reader = cmd.ExecuteReader();
        for (int i = 0; i < reader.FieldCount; i++)
            writer.Write((i==0?"":"|") + reader.GetName(i));
        writer.Write("\n");
        while(reader.Read())
        {
            for (int i =0; i < reader.FieldCount; i++)
            writer.Write((i==0?"":"|") + reader[i].ToString().Replace(@"<me> ", string.Empty).Replace(@" </me>|", "").Replace(@" </me>", ";").Replace('\n', ' ').Replace('\r', ' ') + "|");
            writer.WriteLine();
        }
        reader.Close();
   }
}

1 Ответ

3 голосов
/ 15 декабря 2009

Проблема в способе обработки информации от читателя. Замените Console.Write* на Stream.Write* для вашего кода. Попробуйте это,

SqlDataReader reader = cmd.ExecuteReader();

//Print the column names.
for(int i=0; i < reader.FieldCount; i++)
    Console.Write((i==0?"":"|") + reader.GetName(i));
Console.WriteLine();

//Process each record, note that reader.Read returns one record at a time.
while(reader.Read())
{
    for(int i=0; i < reader.FieldCount; i++)
        Console.Write((i==0?"":"|") + reader[i].ToString().Replace('\r', ' ').Replace('\n', ' '));
    Console.WriteLine();
}
reader.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...