我有一个DataSet地方需要找出使用以下代码更改了多少行:
dataTable1 = dataSet1.Tables["FooTable"].GetChanges();
foreach (DataRow dr in dataTable1)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
DataSet有DataSet.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)
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.如果不是,这将告诉你是否有任何行没有枚举整个批次.
你也可以简单地写
if (dt.Rows.Count == 0)
{
//DataTable does not contain records
}
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,但是因为这可能会帮助很多 C# 编码人员,所以现在有一个简单的方法可以解决这个问题,如下所示:
if ((dataTableName?.Rows?.Count ?? 0) > 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183961 次 |
| 最近记录: |