gpt4 book ai didi

.net - 针对 SQL Server 2008 运行时 SqlDataReader.HasRows 是否存在错误?

转载 作者:行者123 更新时间:2023-12-02 02:30:05 24 4
gpt4 key购买 nike

看一下这两个查询:

-- #1
SELECT * FROM my_table
WHERE CONTAINS(my_column, 'monkey')

-- #2
SELECT * FROM my_table
WHERE CONTAINS(my_column, 'a OR monkey') -- "a" is a noise word

当我在 Management Studio 中运行查询 #1 时,它返回 20 行。
查询 #2 返回相同的 20 行,但我还在“消息”选项卡中看到以下内容:

Informational: The full-text search condition contained noise word(s).

到目前为止,很无聊 - 这正是我所期望的。

现在,看一下这个 C# 代码片段:

using (SqlConnection conn = new SqlConnection(...))
{
SqlCommand cmd = conn.CreateCommand();
// setup the command object...

conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
// get column ordinals etc...

while (dr.Read())
{
// do something useful...
}
}
}
}

当我针对查询 #1 运行此代码时,一切都按预期运行 - 20 行中的每一行都会命中“做一些有用的事情”部分。

当我针对查询 #2 运行它时,没有任何反应 - 永远不会到达“做一些有用的事情”部分。

现在事情变得更有趣了......

如果我删除 HasRows 检查,那么一切都会按预期工作 - 无论使用哪个查询,20 行中的每一行都会命中“做一些有用的事情”部分。

如果 SQL Server 生成消息,则 HasRows 属性似乎未正确填充。结果已返回,并且可以使用 Read() 方法进行迭代,但 HasRows 属性将为 false。

这是 .NET 和/或 SQL Server 中的已知错误,还是我错过了一些明显的东西?
我使用的是 VS2008SP1、.NET3.5SP1 和 SQL2008。

编辑:我很高兴我的问题与 this one 非常相似。 ,几乎可以肯定这是同一个问题的表现,但这个问题已经陷入了三个月的困境,没有明确的答案。

最佳答案

我是所引用问题(丢失登录)的原始发布者,但从未设法弄清楚。最后我把它归咎于糟糕的巫术,牺牲了整洁性并选择了类似的东西

bool readerHasRows=false;
while(reader.reader())
{
readerHasRows=true;
doStuffOverAndOver();
}
if (!readerHasRows)
{
probablyBetterShowAnErrorMessageThen();
}

真正奇怪的是,它在一个 aspx 页面中工作,而不是在另一个 aspx 页面中工作,尽管代码块几乎相同(除了使用的存储过程之外)。

不用说,我从现在开始就避免使用 .HasRows ;)

编辑 - Management Studio 也在我的项目中的问题过程的消息选项卡中显示消息。所以这似乎是问题的原因。但为什么它会困扰.HasRows??

EDIT2 - 已确认,更改查询以避免警告消息,并且 .hasrows 现在为 true。

关于.net - 针对 SQL Server 2008 运行时 SqlDataReader.HasRows 是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483787/

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