gpt4 book ai didi

ado.net - 如何检查结果是否包含行? (FbDataReader.HasRows 始终返回 true!)

转载 作者:行者123 更新时间:2023-12-02 20:41:33 31 4
gpt4 key购买 nike

我正在使用 Firebird ADO.NET 数据提供程序,在将读取器传递给消费服务之前,我想确定是否返回了任何行。考虑以下代码片段:

FbCommand cmd = GetSomeCommandFromTheEther();
FbDataReader reader = cmd.ExecuteReader();

if (reader.HasRows)
DoSomethingWith(reader);
else
TellTheUserWeGotNothing();

我现在了解到的是,FbDataReader.HasRows总是返回True。事实上看着the source code看起来它只是 FbDataReader.command.IsSelectCommand 的包装,不仅无用,而且使属性名称“HasRows”完全用词不当。

无论如何,如何在不推进记录指针的情况下找出给定查询是否有行??请注意,我想将读者传递给外部服务;如果我调用 FbDataReader.Read() 来检查其结果,我将消耗一行,而 DoSomethingWith() 将不会获取第一行。

最佳答案

恐怕您无意中发现了 Firebird 限制。如下所述Firebird FAQ link :

Why FbDataReader.HasRows returns always true?

The FbDataReader.HasRows property is implemented for compatibility only. It returns always true because Firebird doesn't have a way for know if a query returns rows of not without fetching the data.

Firebird Tracker 中已经提到了这一点。检查问题DNET-305 .

另一方面,在.NET中,继承自DbDataReaderOleDbDataReaderSqlDataReader似乎也有同样的问题,如上所述在这个MSDN link

由于 FbDataReader 继承自与这些相同的类,因此您可能需要考虑 Microsoft 在其 MSDN 文章中建议的解决方法之一,即首先执行 select count(* )。诚然,这很不优雅,而且浪费时间和资源,但至少它可以帮助您。

关于ado.net - 如何检查结果是否包含行? (FbDataReader.HasRows 始终返回 true!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21927499/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com