2012-03-08 10 views
22

私はいくつかのデータ行を持つ "結果"と呼ばれるデータセットを持っています。私はこのデータを文字列にしたいのですが、どうやってそれを行うのかは分かりません。私は以下のコードを使用しています:文字列にdatarow値を取得していますか?

string output = ""; 
foreach (DataRow rows in results.Tables[0].Rows)  
{ 
    output = output + rows.ToString() + "\n"; 
} 

しかし、私はこれが機能していないため何かが不足していると思います。誰かが私を正しい方向に向けることができますか?

+0

何が問題なのですか?あなたはどこかで例外を受け取りますか? –

+0

例外はありません。 「出力」の価値は私が期待していたものではないということだけです。しかし、私は、以下の2つの答えは、私が正しい解決策に向かっていると思います。 – Kevin

答えて

37

データを取得する列を指定する必要があります。

は、以下のことを試してみてください。

 StringBuilder output = new StringBuilder(); 
     foreach (DataRow rows in results.Tables[0].Rows) 
     { 
      foreach (DataColumn col in results.Tables[0].Columns) 
      { 
       output.AppendFormat("{0} ", rows[col]); 
      } 

      output.AppendLine(); 
     } 
+0

ジェフ、これは完璧に機能しました!どうもありがとうございます!私はStringBuilderをまったく使用していないので、ここで使用する機会を得てうれしいです。サンプルコードもありがとう! – Kevin

+0

あなたは大歓迎ですが、StringBuilderは素晴らしいです。あなたが文字列を何度も操作したときにいつでもそれを使うことに慣れてください。 – Khan

3

rowsオブジェクトには、各列の値を見つけることができるItem属性があります。行に.ToString()を実行すると、列が連結されることは期待できません。 行の別々の列にアクセスするには、forまたはforeachを使用して列の配列を処理する必要があります。ここで

、クラスを見てみましょう:

http://msdn.microsoft.com/en-us/library/system.data.datarow.aspx

+0

あなたは正しいです、アンドレイ。私は行の列を繰り返し処理する必要があることを忘れてしまいました。 – Kevin

4

をあなたは

rows["ColumnName"] 

を行うことによって、列の値を取得することができますあなたはapproperiate型にキャストする必要があります。

output += (string)rows["ColumnName"] 
+0

ありがとう、マシュー。あなたとAndreiはどちらも、各行の列から自分の値を取得する必要があるという点については正解でした。私はそれについて完全に忘れていた。 – Kevin

20

私は多くを自分でこれをやりました。あなただけの行の値のすべてのためにカンマ区切りのリストが必要な場合は、これを行うことができます:文字列の連結は、大量のデータのために大幅に遅くなるよう

StringBuilder sb = new StringBuilder(); 
foreach (DataRow row in results.Tables[0].Rows)  
{ 
    sb.AppendLine(string.Join(",", row.ItemArray)); 
} 

A StringBuilderのが好ましい方法です。

関連する問題