如何检查空DataTable

时间:2011-06-07 11:32:41

标签: c# ado.net

我有DataSet我需要使用以下代码找出已更改的行数:

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

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

DataSetDataSet.HasRowDataTable没有此类方法。如果没有更改的行。 changedDT1 将为空值,导致循环抛出异常。

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

8 个答案:

答案 0 :(得分:49)

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

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

答案 1 :(得分:39)

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

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

答案 2 :(得分:12)

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

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

答案 3 :(得分:10)

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

setup()

但遗憾的是,bool hasRows = dataTable1.Rows.Any() 未实现DataRowCollection。  所以,试试这个:

IEnumerable

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

答案 4 :(得分:4)

从MSDN开始GetChanges

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

dataTable1为空,因此请在迭代之前进行检查。

答案 5 :(得分:4)

您也可以简单地写

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

答案 6 :(得分:1)

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,而是空白行。

答案 7 :(得分:1)

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

<h1>Test</h1>