我想将每个Datatable Column存储在一个字符串变量中,以便我可以将所有这些参数传递给我的存储过程。 对于DataTable
中的每一行,这将继续DataTable dtOutput;
dtOutput= Generix.getFeedData(1,ref Connection);
foreach (DataRow drOutput in dtOutput.Rows)
{
Console.Write("IST: ");
foreach (DataColumn dcOutput in dtOutput.Columns)
{
Console.Write(Convert.ToString(drOutput[dcOutput]) + "\t");
}
Console.WriteLine();
}
上面的代码应该打印每一列和"\t"
作为分隔符和新行上的新行。我的DataTable包含4列
我的DataTable以下列方式打印:
ATM Message
ABC001 Hello
ABC002 SAGAR
现在我想以下列方式:
string sAtm;// Should Print ABC001
string sMsg;//Should Print Hello
对于下一行,sAtm
中的值为ABC002
答案 0 :(得分:1)
对于它的价值,你可以使用Linq将所有参数作为字符串。
挑选出你需要的东西:
var allAsString = table.AsEnumerable()
.Select((r, ri) => new
{
Row = r,
RowNumber = ri,
Fields = r.ItemArray.Select((f, i) => new
{
Col = table.Columns[i],
FieldText = string.Format("{0}", f)
})
});
因此,如果您想要迭代所有行并获取特定字段:
foreach (var rowInfo in allAsString)
{
string sAtm = rowInfo.Fields.First(f => f.Col.ColumnName == "ATM").FieldText;
string sMsg = rowInfo.Fields.First(f => f.Col.ColumnName == "Message").FieldText;
}
请务必添加using system.Linq;
。
修改:如果您想将整个DataTable保存在一个字符串中:
String strTable = String.Join(
Environment.NewLine,
table.AsEnumerable().Select(r => String.Join("\t", r.ItemArray)));
答案 1 :(得分:0)
使用StringBuilder
:
StringBuilder sb = new StringBuilder();
DataTable dtOutput = Generix.getFeedData(1,ref Connection);
foreach (DataRow drOutput in dtOutput.Rows)
{
sb.Append("IST: ");
foreach (DataColumn dcOutput in dtOutput.Columns)
{
sb.Append(Convert.ToString(drOutput[dcOutput]) + "\t");
}
sb.AppendLine();
}
您的数据将存储在sb
中,因此只需在传递到存储过程sb.ToString()
时转换为字符串。