DataTable / DataHelper 行通过存储过程不为空
Posted
技术标签:
【中文标题】DataTable / DataHelper 行通过存储过程不为空【英文标题】:DataTable / DataHelper rows not empty via stored procedure 【发布时间】:2022-01-16 16:09:47 【问题描述】:只是有点卡住了,我似乎无法在 google 上找到我要找的东西。
由于某种原因,这个If
语句会产生行并继续运行代码,即使我知道存储过程不会产生任何结果。
我什么都试过了
(rp.Rows[0] != null) / (rp.Rows.Count > 0)
和 &&
语句的组合没有运气。我的印象是所有这些语句只有在存储过程返回一行时才会触发?
对于我想在 Microsoft 文档中找到的确切内容,我也有点迷茫,感谢有人可能提供的回复和指导。
var rp = DataHelper.ExecuteStoredProcedure("[dbo].[Report]", newSqlParameter("@reportId", id));
if (rp.Rows.Any())
// code
【问题讨论】:
当您调试时 -rp.Rows
是否包含任何内容?如果你运行int count = rp.Rows.Count
- 你会得到什么价值?很难对外面的任何人说,因为 DataHelper
看起来不像一个标准的 .NET 类 - 所以我们不可能知道该类内部发生了什么以及它返回什么......
它只是一个保存DataTable的类,我会看看我是否可以让程序在VS中运行 - 调试。很高兴确认我可能应该已经问过这个问题了。
【参考方案1】:
您不能在 DataRowCollection 上使用 .Any()
(或任何其他 linq 扩展方法)而不先执行类似 .Cast<DataRow>()
的操作,因为 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
但与你所说的你想要的不一致:
当我知道存储过程不会产生任何结果时。
如果 sproc 不产生行并且代码仅在有行时运行,则代码不会运行
怎么样
if(rp.Rows.Count == 0)
MessageBox.Show("no rows");
else
foreach(DataRow r in rp.Rows)
Console.WriteLine(r["some column name here"]);
【讨论】:
感谢您的回复,我犯了一个菜鸟错误,认为我的 SP 在实际设置为“END”而不是没有结果时没有产生任何行,我现在已经修复它并且它可以工作。干杯,你所有不同的方式现在在这种情况下都很有用。以上是关于DataTable / DataHelper 行通过存储过程不为空的主要内容,如果未能解决你的问题,请参考以下文章
CS0103: 当前上下文中不存在名称“DataHelper”
Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucu