如何检查空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不为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()