通过存储过程,DataTable/DataHelper行不为空



只是有点卡住了,我似乎在谷歌上找不到我要找的东西。

出于某种原因,这个If语句会生成行并继续运行代码,即使我知道存储过程不会产生任何结果。

我试过的所有东西

(rp.Rows[0] != null) / (rp.Rows.Count > 0) 

以及没有运气的CCD_ 2语句的组合。我的印象是,只有当存储过程返回一行时,所有这些语句才会触发?

我也有点不知道我想在微软的文档中找到什么,感谢有人可能提供的回复和指导。

var rp = DataHelper.ExecuteStoredProcedure("[dbo].[Report]", newSqlParameter("@reportId", id));
if (rp.Rows.Any()) 
{
// code
}

如果不首先执行类似.Cast<DataRow>()的操作,就不能在DataRowCollection上使用.Any()(或任何其他linq扩展方法(,因为DataRowCollection实现IEnumerable,而不是IEnumerable<T>linq需要

if(dt.Rows.Cast<DataRow>().Any())

这对我来说没有意义:

(rp.Rows[0] != null) / (rp.Rows.Count > 0) 

不能将一个布尔值除以另一个。。


此外,如果没有行,这将崩溃:

rp.Rows[0] != null) 

这将很好地工作,并将检测是否有行

rp.Rows.Count > 0

但与你所说的不一致:

当我知道存储过程不会产生任何结果时。

如果存储过程不生成行,并且代码仅在有行时运行,则代码不会运行

怎么样

if(rp.Rows.Count == 0)
MessageBox.Show("no rows");
else
foreach(DataRow r in rp.Rows)
Console.WriteLine(r["some column name here"]);

最新更新