只是有点卡住了,我似乎在谷歌上找不到我要找的东西。
出于某种原因,这个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"]);