C# 如何将数据集转换为StringBuilder
我有一个C# 如何将数据集转换为StringBuilder,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我有一个数据集,其中有4个唯一的表。我想将整个数据集转换为StringBuilder DataTable fileData = ***Some Data*** if (fileData.Rows.Count == 0) return (true, "No Records"); StringBuilder builder = new StringBuilder(); IEnumerable<string> columnNames = fileData .Columns
数据集
,其中有4个唯一的表。我想将整个数据集
转换为StringBuilder
DataTable fileData = ***Some Data***
if (fileData.Rows.Count == 0)
return (true, "No Records");
StringBuilder builder = new StringBuilder();
IEnumerable<string> columnNames = fileData
.Columns
.Cast<DataColumn>()
.Select(column => column.ColumnName);
builder.AppendLine(string.Join("|", columnNames));
foreach (DataRow row in fileData.Rows)
{
IEnumerable<string> fields = row.ItemArray
.Select(field => RemoveSpecialCharacters(field
?.ToString()
.Replace(",",";")));
builder.AppendLine(string.Join("|", fields));
}
我知道我们可以使用下面的代码将DataTable
转换为StringBuilder
DataTable fileData = ***Some Data***
if (fileData.Rows.Count == 0)
return (true, "No Records");
StringBuilder builder = new StringBuilder();
IEnumerable<string> columnNames = fileData
.Columns
.Cast<DataColumn>()
.Select(column => column.ColumnName);
builder.AppendLine(string.Join("|", columnNames));
foreach (DataRow row in fileData.Rows)
{
IEnumerable<string> fields = row.ItemArray
.Select(field => RemoveSpecialCharacters(field
?.ToString()
.Replace(",",";")));
builder.AppendLine(string.Join("|", fields));
}
我正在使用fileDataStream
生成excel。
上面的代码将数据表
转换为流,现在我想将数据集
转换为流
,这样我就可以使用新的流
(数据集
数据)生成excel
更新2:
var byteArray = ec.GetBytes(builder.ToString());
var fileDataStream = new MemoryStream(byteArray);
我在DataSet
中使用了下面的代码,但仅使用了DataSet
中存储在StringBuilder
中的最后一个表数据,而不是所有4个表数据
foreach (DataTable dt in dataSetFileDetails.Tables)
{
if (dt.Rows.Count == 0) return (true, "No Records");
builder = new StringBuilder();
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
builder.AppendLine(string.Join("|", columnNames));
foreach (DataRow row in dt.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => RemoveSpecialCharacters(field?.ToString().Replace(",", ";")));
builder.AppendLine(string.Join("|", fields));
}
}
foreach(dataSetFileDetails.Tables中的DataTable dt)
{
如果(dt.Rows.Count==0)返回(true,“无记录”);
生成器=新的StringBuilder();
IEnumerable columnNames=dt.Columns.Cast()。
选择(column=>column.ColumnName);
builder.AppendLine(string.Join(“|”,columnNames));
foreach(数据行中的数据行)
{
IEnumerable fields=row.ItemArray.Select(field=>RemoveSpecialCharacters(field?.ToString().Replace(“,”,“;”)));
builder.AppendLine(string.Join(“|”,字段));
}
}
在数据集的DataTable属性上循环
StringBuilder sb = new StringBuilder();
foreach(var table in DataSet.DataTable)
{
YourCode(sb);
}
void YourCode(StringBuilder stringBuilder)
{
DataTable fileData = ***Some Data***
if (fileData.Rows.Count == 0)
return (true, "No Records");
IEnumerable<string> columnNames = fileData
.Columns
.Cast<DataColumn>()
.Select(column => column.ColumnName);
stringBuilder.AppendLine(string.Join("|", columnNames));
foreach (DataRow row in fileData.Rows)
{
IEnumerable<string> fields = row.ItemArray
.Select(field => RemoveSpecialCharacters(field?.ToString().Replace(",",";")));
stringBuilder.AppendLine(string.Join("|", fields));
}
}
StringBuilder sb=新建StringBuilder();
foreach(DataSet.DataTable中的var表)
{
你的代码(sb);
}
作废您的代码(StringBuilder StringBuilder)
{
DataTable fileData=***某些数据***
if(fileData.Rows.Count==0)
返回(正确,“无记录”);
IEnumerable columnNames=文件数据
.栏目
.Cast()
.Select(column=>column.ColumnName);
stringBuilder.AppendLine(string.Join(“|”,columnNames));
foreach(fileData.Rows中的DataRow行)
{
IEnumerable fields=row.ItemArray
.Select(field=>RemoveSpecialCharacters(field?.ToString().Replace(“,”,“;”)));
stringBuilder.AppendLine(string.Join(“|”,字段));
}
}
在数据集的DataTable属性上循环
StringBuilder sb = new StringBuilder();
foreach(var table in DataSet.DataTable)
{
YourCode(sb);
}
void YourCode(StringBuilder stringBuilder)
{
DataTable fileData = ***Some Data***
if (fileData.Rows.Count == 0)
return (true, "No Records");
IEnumerable<string> columnNames = fileData
.Columns
.Cast<DataColumn>()
.Select(column => column.ColumnName);
stringBuilder.AppendLine(string.Join("|", columnNames));
foreach (DataRow row in fileData.Rows)
{
IEnumerable<string> fields = row.ItemArray
.Select(field => RemoveSpecialCharacters(field?.ToString().Replace(",",";")));
stringBuilder.AppendLine(string.Join("|", fields));
}
}
StringBuilder sb=新建StringBuilder();
foreach(DataSet.DataTable中的var表)
{
你的代码(sb);
}
作废您的代码(StringBuilder StringBuilder)
{
DataTable fileData=***某些数据***
if(fileData.Rows.Count==0)
返回(正确,“无记录”);
IEnumerable columnNames=文件数据
.栏目
.Cast()
.Select(column=>column.ColumnName);
stringBuilder.AppendLine(string.Join(“|”,columnNames));
foreach(fileData.Rows中的DataRow行)
{
IEnumerable fields=row.ItemArray
.Select(field=>RemoveSpecialCharacters(field?.ToString().Replace(“,”,“;”)));
stringBuilder.AppendLine(string.Join(“|”,字段));
}
}
这不是对您问题的直接回答,因为转换为StringBuilder没有意义。但是,您是说,您可以这样做来生成Excel。我建议您使用nuget的EPPlus库
假设您有一个名为ds的数据集:
ExcelPackage pck = new ExcelPackage();
foreach (DataTable table in ds.Tables)
{
var ws = pck.Workbook.Worksheets.Add(table.TableName);
ws.Cells["A1"].LoadFromDataTable(table, true);
}
var fi = new FileInfo(@"c:\temp\MyExcelDataSet.xlsx");
if (fi.Exists)
{
fi.Delete();
}
pck.SaveAs(fi);
这不是对您问题的直接回答,因为转换为StringBuilder没有意义。但是,您是说,您可以这样做来生成Excel。我建议您使用nuget的EPPlus库 假设您有一个名为ds的数据集:
ExcelPackage pck = new ExcelPackage();
foreach (DataTable table in ds.Tables)
{
var ws = pck.Workbook.Worksheets.Add(table.TableName);
ws.Cells["A1"].LoadFromDataTable(table, true);
}
var fi = new FileInfo(@"c:\temp\MyExcelDataSet.xlsx");
if (fi.Exists)
{
fi.Delete();
}
pck.SaveAs(fi);
您的意思是使用
StringBuilder
将数据集转换为管道分隔字符串吗?您可以通过已具有代码的DataSet.Tables属性(请参阅:)访问DataTable对象。转换为StringBuilder意味着什么?可以使用WriteXML获取整个数据集的字符串表示(XML)。或者,您可以使用Linq To CSV作为CSV输出(看起来就像您正在尝试做的事情)。您所需要的只是在dataset中循环表。啊,您正在尝试从流创建excel。然后查看Excel的Ado.Stream和CopyFromRecordSet。它们是现成的功能。您也可以直接使用Linq To Excel或ADO.net来创建Excel文件。或者更简单,使用Nuget中的EPPLus并将集合(表)放在工作表上。您的意思是使用StringBuilder
“将数据集转换为管道分隔字符串”的可能重复项?您可以通过DataSet.tables属性访问DataTable对象(请参阅:)您已经有了代码。转换为StringBuilder意味着什么?可以使用WriteXML获取整个数据集的字符串表示(XML)。或者,您可以使用Linq To CSV作为CSV输出(看起来就像您正在尝试做的事情)。您所需要的只是在dataset中循环表。啊,您正在尝试从流创建excel。然后查看Excel的Ado.Stream和CopyFromRecordSet。它们是现成的功能。您也可以直接使用Linq To Excel或ADO.net来创建Excel文件。或者更简单一些,使用Nuget的ePlus并将您的集合(表)放到工作表上