Запись строк из 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);
    }
  }
}

Не уверен, что мне здесь не хватает, но я думаю, что это может быть имя столбца, которое я не уверен, как его настроить.

это работает нормально, за исключением того, что при записи в текстовый файл он пишет это:

5 ответов


что-то типа:

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

было бы более уместно.


при попытке распечатать DataRow вот так, он вызывает Object.ToString(), который просто печатает имя типа. Что вы хотите сделать, это что-то вроде:

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

выводит разделенный запятыми список всех элементов в элементе DataRow.


приведенный ниже код позволит вам написать текстовый файл каждого столбца, разделенных '|'

    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());             
     }

ссылка


для 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();
}

вам нужно написать столбцы из каждого DataRow. В настоящее время вы пишете объект DataRow, который является dataRow.ToString (), следовательно, вы получаете имя строки "System.Data.DataRow" of dataRow в вашем файле

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