C# C SQL导出格式
我在设置此代码以我喜欢的格式导出文本时遇到问题,任何提示都将非常有用 场景:我有一个从SQL查询填充的列表框。该列表框有一个按钮用于填充列表框2。列名称是从listbox1中选择的任何列,数据是相应的数据。我能够在数据集中设置这种格式,但我不得不将其更改为海量数据库 我无法将数据集代码格式化为此流代码。我需要以以下格式导出C# C SQL导出格式,c#,sql,C#,Sql,我在设置此代码以我喜欢的格式导出文本时遇到问题,任何提示都将非常有用 场景:我有一个从SQL查询填充的列表框。该列表框有一个按钮用于填充列表框2。列名称是从listbox1中选择的任何列,数据是相应的数据。我能够在数据集中设置这种格式,但我不得不将其更改为海量数据库 我无法将数据集代码格式化为此流代码。我需要以以下格式导出 Column name|Column name|Column name|Column name|Column name|Column name| 数据|数据|数据|数据|数
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();
}
}
问题在于你处理读者信息的方式。将代码的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();
你在问问题吗?你是说第二个代码fragmetn工作得很好,那么问题是什么呢?问题是我不能让顶部代码以与底部代码相同的格式导出。我太新了,无法理解如何让顶部代码导出输出文本,因为我能够将输出文本设置为.Columns.Cast和.Rows.Cast的数据集。底部代码在一个大块中完成所有操作,并耗尽内存。SQL表大约有300万行。上面的代码解决了内存问题,但是下面的代码正确地导出了,我如何让它们一起工作。这不能很好地处理行末尾的多条目。BDc | EDc | DDate | DType | DTitle | Autr | cip |生产:972328 | 972335 | 070305 | MS | SUCAL INV MIS:| VVM32792 XO WEL | | | |这是多条生产线,我希望你是指线馈送。您可以用空格替换\r\n来完成此操作。为了实现这一点,我稍微修改了代码,try-out实际上代表多条目,其中第三方程序添加了这些来处理其内部多条目显示。它工作得很好,现在如果它不在每行末尾添加一个额外的|,那就太完美了!事实上,我撒谎了,我无法让它停止在行尾写一个|。