Подтвердить что ты не робот

Как проверить пустой DataTable

У меня есть DataSet, где мне нужно выяснить, сколько строк было изменено с помощью следующего кода:

dataTable1 = dataSet1.Tables["FooTable"].GetChanges();

foreach (DataRow dr in dataTable1)
{
  // ...
}

DataSet имеет DataSet.HasRow, но DataTable не имеет такого метода. Если нет измененных строк. измененоDT1 будет нулевым значением, заставив цикл генерировать исключение.

Как проверить, пуст ли DataTable? Я пробовал Rows.Count - не работает...

4b9b3361

Ответ 1

Если dataTable1 имеет значение null, это не пустой набор данных. Просто оберните ваш foreach в оператор if, который проверяет, является ли dataTable1 нулевым:

if (dataTable1 != null)
{
   foreach (DataRow dr in dataTable1)
   {
      // ...
   }
}

Ответ 2

Сначала убедитесь, что DataTable не равен NULL, и проверьте количество строк

if(dt!=null)
{
  if(dt.Rows.Count>0)
  {
    //do your code 
  }
}

Ответ 3

Обычно при запросе базы данных с SQL и заполнении таблицы данных ее результатами она никогда не будет пустой таблицей данных. У вас есть заголовки столбцов, заполненные информацией о столбцах, даже если вы вернули 0 записей. Когда кто-то пытался обработать таблицу данных с 0 записями, но с информацией о столбцах, она будет генерировать исключение. Чтобы проверить данные, которые должны быть обработаны перед обработкой, можно было бы проверить это.

if (DetailTable != null && DetailTable.Rows.Count>0)

Ответ 4

Не используйте rows.Count. Это спрашивает, сколько строк существует. Если их много, для их подсчета потребуется некоторое время. Все, что вы действительно хотите знать, это "есть хотя бы один"? Вам все равно, есть ли 10 или 1000 или миллиард. Вы просто хотите знать, есть ли хотя бы один. Если я дам вам коробку и спрошу, есть ли в ней какие-то мраморы, вы сбросите коробку на столе и начнете подсчет? Конечно нет. Используя LINQ, вы можете подумать, что это сработает:

bool hasRows = dataTable1.Rows.Any()

Но, к сожалению, DataRowCollection не реализует IEnumerable.  Вместо этого попробуйте следующее:

bool hasRows = dataTable1.Rows.GetEnumerator().MoveNext()

Конечно, вам нужно будет проверить, является ли dataTable1 нулевым первым. если это не так, это скажет вам, есть ли какие-либо строки без перечисления всей партии.

Ответ 5

Как из MSDN для GetChanges

Отфильтрованная копия DataTable, которая может выполнять действия, выполняемые на ней, и позже будет объединена обратно в DataTable с помощью Merge. Если строки требуемого DataRowState не найдены, метод возвращает Nothing (null).

dataTable1 имеет значение null, поэтому просто проверьте, прежде чем вы перебираете его.

Ответ 6

Вы также можете просто написать

 if (dt.Rows.Count == 0)
     {
         //DataTable does not contain records
     }        

Ответ 7

Sub Check_DT_ForNull()
Debug.Print WS_FE.ListObjects.Item(1).DataBodyRange.Item(1).Value
If Not WS_FE.ListObjects.Item(1).DataBodyRange.Item(1).Value = "" Then
   Debug.Print WS_FE.ListObjects.Item(1).DataBodyRange.Rows.Count
End If
End Sub

Это проверяет значение первой строки в DataBodyRange для Null и подсчитывает общее количество строк. Это сработало для меня, когда я загрузил свою таблицу данных с сервера. В ней не было данных, но таблица была создана с пробелами, а Rows.Count был не 0, а пустыми строками.

Ответ 8

Это старый вопрос, но поскольку это может помочь многим программистам на С#, существует простой способ решить эту проблему прямо сейчас:

if ((dataTableName?.Rows?.Count ?? 0) > 0)