- PR -

データテーブルを出力したい

1
投稿者投稿内容
KM
会議室デビュー日: 2007/02/14
投稿数: 15
投稿日時: 2007-03-07 10:43
今、テーブルの中身をログ(txtファイル)に出す仕組みをつくっているのですが、
データは出力できるのですが、フィールド名が取れません。

書き方が良くないとか、そもそも呼び出し方が違うとかあるかもしれないので、
そのあたりも含めてご指導いただきたいと思います。

以下のコードはテーブルの中身を取り出すものです。

public string OutputTable(DataTable dt)
{
StringBuilder sb = new StringBuilder();
try
{
foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < dr.ItemArray.Length; i++)
{
if (dr.ItemArray[i] != null)
{
sb.Append(dr.ItemArray[i].ToString() + ",");
}
else
{
sb.Append("NULL,");
}
}
sb.Append("\r\n");
}
return sb.ToString();
}
catch
{
return "テーブルデータ出力エラー";
}
}
KM
会議室デビュー日: 2007/02/14
投稿数: 15
投稿日時: 2007-03-07 10:51
ゴメンナサイ、インデントが抜けてました。。。

public string OutputTable(DataTable dt)
{
  StringBuilder sb = new StringBuilder();
  try
  {
    foreach (DataRow dr in dt.Rows)
    {
      for (int i = 0; i < dr.ItemArray.Length; i++)
      {
        if (dr.ItemArray[i] != null)
        {
          sb.Append(dr.ItemArray[i].ToString() + ",");
        }
        else
        {
          sb.Append("NULL,");
        }
      }
      sb.Append("¥r¥n");
    }
    return sb.ToString();
  }
  catch
  {
   return "テーブルデータ出力エラー";
  }
}
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-03-07 11:14
データテーブル作るときに設定していれば、フィールド名はRows(行)ではなくColumns(列)にあります。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-03-07 11:25
引用:

KMさんの書き込み (2007-03-07 10:43) より:

今、テーブルの中身をログ(txtファイル)に出す仕組みをつくっているのですが、
データは出力できるのですが、フィールド名が取れません。


これはテキストファイル?というよりは CSV ファイルでしょうかね。
あと、たぶん書き忘れなのだと思いますが、フィールド名を取って『どうする
のか』が示されていないと、皆さんも答えようがないのではないかと。
# と思ったら未記入さんが書いてました

と言ってもそれでは困るので、エスパー伊東をフル稼働して少し考えてみ
ました。要するに

コード:

名前,役職,中の人
R・田中一郎,部長,塩沢兼人(故人)
大戸島さんご,副部長,笠原弘子
鳥坂司,ジ・OB,神谷明
あさの,NULL,伊崎寿克
きしだ,NULL,長谷有洋(故人(;´Д⊂))


という感じに出力したい、と?

とりあえずこんな感じでどうでしょうか。環境がどこにも書いていなかったの
で C# 2.0 で作りましたが、違う場合は適宜変更してください。

コード:

    public string OutputTable(DataTable dt)
    {
        StringBuilder sb = new StringBuilder();
        try
        {
            List<string> header = new List<string>();
            foreach (DataColumn col in dt.Columns)
            {
                header.Add(col.Caption);
            }
            sb.AppendLine(string.Join(",", header.ToArray()));

            foreach (DataRow dr in dt.Rows)
            {
                List<string> lines = new List<string>();
                foreach (object columnData in dr.ItemArray)
                {
                    if (columnData == null || columnData == DBNull.Value)
                    {
                        lines.Add("NULL");
                    }
                    else
                    {
                        lines.Add(columnData.ToString());
                    }
                }
                sb.AppendLine(string.Join(",", lines.ToArray()));
            }
            return sb.ToString();
        }
        catch
        {
            return "テーブルデータ出力エラー";
        }
    }


_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
KM
会議室デビュー日: 2007/02/14
投稿数: 15
投稿日時: 2007-03-07 13:19
ぽぴ様

ありがとうございます。
まさに、おっしゃる通りでした。

考え方が違ったみたいですね。
列のループをしなくちゃ取れないと。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)