将数据从DataTable写入文本文件

时间:2012-07-31 22:15:32

标签: c# datatable

public void GenerateDetailFile()
{
  if (!Directory.Exists(AppVars.IntegrationFilesLocation))
  {
    Directory.CreateDirectory(AppVars.IntegrationFilesLocation);
  }

  DateTime DateTime = DateTime.Now;
  using (StreamWriter sw = File.CreateText(AppVars.IntegrationFilesLocation +
                                DateTime.ToString(DateFormat) + " Detail.txt"))
  {
    DataTable table = Database.GetDetailTXTFileData();

    foreach (DataRow row in table.Rows)
    {
      sw.WriteLine(row);
    }
  }
}

不确定我在这里缺少什么,但我认为它可能是列名,我不知道如何设置它。

这样工作正常,但是当它写入文本文件时,它写的是:

的System.Data.DataRow

的System.Data.DataRow
的System.Data.DataRow
的System.Data.DataRow
的System.Data.DataRow
的System.Data.DataRow
的System.Data.DataRow
的System.Data.DataRow
的System.Data.DataRow 的System.Data.DataRow

任何人都可以帮我一把吗?

5 个答案:

答案 0 :(得分:17)

当您尝试打印出类似的DataRow时,它正在调用Object.ToString(),它只打印出该类型的名称。你想做的是:

sw.WriteLine(String.Join(",", row.ItemArray));

这将打印逗号分隔的DataRow

中所有项目的列表

答案 1 :(得分:8)

类似的东西:

sw.WriteLine(row["columnname"].ToString());

会更合适。

答案 2 :(得分:5)

下面的代码将让您编写文本文件,每列由' |'分隔。

    foreach (DataRow row in dt.Rows)
      {  
         object[] array = row.ItemArray;
         for (i = 0; i < array.Length - 1; i++)
         {
           swExtLogFile.Write(array[i].ToString() + " | ");
         }
          swExtLogFile.WriteLine(array[i].ToString());             
     }

Reference link

答案 3 :(得分:3)

DataRow没有“自然”字符串表示。您需要以您想要的任何格式写出它,即以逗号分隔的值列表等。您可以枚举列并打印它们的值,例如:

foreach (DataRow row in table.Rows)
{
    bool firstCol = true;
    foreach (DataColumn col in table.Columns)
    {
        if (!firstCol) sw.Write(", ");
        sw.Write(row[col].ToString());
        firstCol = false;
    }
    sw.WriteLine();
}

答案 4 :(得分:1)

您需要从每个DataRow写入列。目前您正在编写DataRow对象dataRow.ToString(),因此您在文件中获得dataRow的字符串名称"System.Data.DataRow"

foreach(DataRow row in table.Rows)
{
 foreach(DataColumn column in table.Columns)
 {
  sw.WriteLine(row[column]);
 }
}