我有DataSet
我需要使用以下代码找出已更改的行数:
dataTable1 = dataSet1.Tables["FooTable"].GetChanges();
foreach (DataRow dr in dataTable1)
{
// ...
}
DataSet
有DataSet.HasRow
但DataTable
没有此类方法。如果没有更改的行。 changedDT1 将为空值,导致循环抛出异常。
如何检查DataTable
是否为空?我试过Rows.Count
- 不起作用......
答案 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>