如何检查空DataTable

KMC*_*KMC 38 c# ado.net

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

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

foreach (DataRow dr in dataTable1)
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

DataSetDataSet.HasRow,但DataTable没有这样的方法.如果没有更改的行.changedDT1将为空值,导致循环抛出异常.

如何检查是否DataTable为空?我试过Rows.Count- 不行......

Pra*_*ana 53

首先确保DataTable不是null,而不是检查行数

if(dt!=null)
{
  if(dt.Rows.Count>0)
  {
    //do your code 
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 您不需要检查行数,如果没有行,则 foreach 将不会运行。 (3认同)

Ben*_*son 39

如果'dataTable1'为null,则它是一个空数据表.只需将foreach包装在一个if语句中,该语句检查'dataTable1'是否为null:

if (dataTable1 != null)
{
   foreach (DataRow dr in dataTable1)
   {
      // ...
   }
}
Run Code Online (Sandbox Code Playgroud)


小智 14

通常,在使用SQL查询数据库,然后使用其结果填充数据表时,它永远不会是空数据表.即使您返回0条记录,也会在列标题中填充列信息.当一个人尝试处理具有0条记录但具有列信息的数据表时,它将抛出异常.要在处理之前检查数据表,可以像这样检查.

if (DetailTable != null && DetailTable.Rows.Count>0)
Run Code Online (Sandbox Code Playgroud)


小智 11

不要使用rows.Count.那就是要求存在多少行.如果有很多,计算它们需要一些时间.你真正想知道的是"至少有一个吗?" 你不在乎是否有10或1000或10亿.你只想知道是否至少有一个.如果我给你一个盒子并问你是否有任何大理石,你会把盒子丢弃在桌子上并开始计数吗?当然不是.使用LINQ,您可能认为这会起作用:

bool hasRows = dataTable1.Rows.Any()
Run Code Online (Sandbox Code Playgroud)

但不幸的是,DataRowCollection没有实施IEnumerable.所以,试试这个:

bool hasRows = dataTable1.Rows.GetEnumerator().MoveNext()
Run Code Online (Sandbox Code Playgroud)

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


RSB*_*RSB 5

你也可以简单地写

 if (dt.Rows.Count == 0)
     {
         //DataTable does not contain records
     }        
Run Code Online (Sandbox Code Playgroud)

  • 但是如果数据库为空,就会抛出异常。 (2认同)

Yei*_*Qva 5

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

if ((dataTableName?.Rows?.Count ?? 0) > 0)
Run Code Online (Sandbox Code Playgroud)