将每个DataTable列存储在字符串var中

时间:2012-10-23 14:25:22

标签: c#

我想将每个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

2 个答案:

答案 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()时转换为字符串。