0

我想将每个数据表列存储在一个字符串变量中,以便我可以将所有这些参数传递给我的存储过程。这将针对 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"作为分隔符和新行的新行。我的数据表包含 4 列

我的 DataTable 以以下方式打印:

ATM         Message

ABC001      Hello
ABC002      SAGAR

现在我想通过以下方式:

string sAtm;// Should Print ABC001
string sMsg;//Should Print Hello

对于下一行的值sAtm将是ABC002

4

2 回答 2

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)));
于 2012-10-23T14:36:02.017 回答
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()

于 2012-10-23T14:41:47.317 回答