如何检查空DataTable

本文关键字:DataTable 检查 何检查 | 更新日期: 2023-09-27 17:58:29

我有一个DataSet,需要使用以下代码找出更改了多少行:

dataTable1 = dataSet1.Tables["FooTable"].GetChanges();
foreach (DataRow dr in dataTable1)
{
  // ...
}

CCD_ 2具有CCD_ 3,而CCD_。如果没有更改的行changedDT1将为null值,导致循环引发异常。

如何检查DataTable是否为空?我试过Rows.Count-不起作用。。。

如何检查空DataTable

首先确保DataTable不为null,然后检查行计数

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

如果dataTable1为null,则它不是空数据表。

只需将foreach封装在if语句中,该语句检查dataTable1是否为null。请确保foreach的计数超过DataTable1.Rows,否则将出现编译错误。

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

通常,当用SQL查询数据库并用其结果填充数据表时,它永远不会是空数据表。即使返回了0条记录,列标题中也会填充列信息。当试图处理一个包含0条记录但包含列信息的数据表时,会引发异常。要在处理之前检查数据表,可以这样检查。

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

不要使用行。计数这是询问存在多少行。如果数量很多,则需要一段时间来计算。你真正想知道的是"至少有一个吗?"你不在乎是10、1000还是10亿。你只想知道是否至少有一个。如果我给你一个盒子,问你里面有没有弹珠,你会把盒子倒在桌子上开始数吗?当然不是。使用LINQ,您可能会认为这会起作用:

bool hasRows = dataTable1.Rows.Any()

但不幸的是,DataRowCollection并没有实现IEnumerable。所以,试试这个:

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

当然,您需要首先检查dataTable1是否为null。如果没有,这将告诉您是否有任何行,而不枚举整个批次。

您也可以简单地编写

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

这是一个老问题,但因为这可能会帮助很多c#程序员,现在有一种简单的方法可以解决这个问题,如下所示:

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

As from MSDN for GetChanges

经过筛选的DataTable副本,可以对其执行操作,然后使用Merge将其合并回DataTable。如果找不到所需DataRowState的行,则方法将返回Nothing(null)

dataTable1为空,因此在对其进行迭代之前只需进行检查。

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,并计算总行数当我从服务器下载数据表时,这对我来说很有效。它没有数据,但表是用空格和行创建的。计数不是0,而是空行。

bool empty = !DataTableExtensions.AsEnumerable(DataTableToCheck).Any()