2012-10-23 25 views
0

我想将每个Datatable列存储在一个字符串变量中,以便我可以将所有这些参数传递给我的存储过程。 这将DataTable中将每个DataTable列存储在字符串中var

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"作为分隔符和新行新line.My DataTable包含4列

我的DataTable中打印下列方式:

ATM   Message 

ABC001  Hello 
ABC002  SAGAR 

现在我想在下面的方法:

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

对于下一行价值sAtmABC002

+0

如果这就是您的代码“应该”打印什么,它当前正在打印什么?这似乎是乍一看有效的代码... –

+0

存储在字符串变量列中的每个打印。 – Shaggy

回答

1

对于它的价值,你可以使用LINQ得到所有PARAMS为字符串。

挑选出你所需要的:

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;


编辑:如果你不是想整个数据表保存在一个字符串:

String strTable = String.Join(
     Environment.NewLine, 
     table.AsEnumerable().Select(r => String.Join("\t", r.ItemArray))); 
+0

&在哪个字符串中存储数据列? – Shaggy

+0

这会将每一列存储在一个字符串变量中。我希望将一行中的所有列存储在diff字符串变量中。 – Shaggy

+0

@SagarDumbre:编辑我的答案,如果你只想一个字符串与所有行的所有字段。如果你想改变其他变量中所有行的所有字段,请使用我的第一种方法,它创建一个'IEnumerable <匿名类型>'。 –

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

+0

我不能存储每个列的值来比较字符串为一个特定的row.and下一行所有以前的字符串值应该被删除 – Shaggy

+0

请检查问题编辑... – Shaggy

+0

@SagarDumbre好吧,是的,你可以。这是否意味着你将在'dtOutput.Rows'的每次迭代中调用你的存储过程? –

相关问题