gpt4 book ai didi

c# - 为什么我在打开连接时收到 "Invalid attempt to call HasRows when reader is closed"?

转载 作者:行者123 更新时间:2023-12-02 01:46:13 32 4
gpt4 key购买 nike

我有这个代码:

// this is managed elsewhere
SqlConnection connection =...
connection.Open();

// this is one block of code, separate from the above
using( var transaction = connection.BeginTransaction() ) {
using( var command = connection.CreateCommand() ) {
command.Transaction = transaction;
command.CommandText = ...
using( var reader = command.ExecuteReader() ) {
if( reader.HasRows ) {
if( reader.Read() ) {
//get data from the reader
}
}
}
}

并且这段代码在大多数情况下运行得很好。但有时(很少见)检索 HasRows 会产生以下异常:

Invalid attempt to call HasRows when reader is closed.
System.InvalidOperationException
at System.Data.SqlClient.SqlDataReader.get_HasRows()
// my code calling HasRows listed here

我 99.5% 确信此时连接已打开。我的代码在从阅读器读取 pretty much like MSDN suggests 之前使用 HasRows .

该异常的原因可能是什么?

最佳答案

这恰好是 unexpected behavior in ExecuteReader() - 很可能是一个错误。在 ExecuteReader() 内部会发生一些随机错误,很可能是网络超时,连接被关闭,然后返回一个关闭的 SqlDataReader,就像什么都没发生一样。难怪随后调用 HasRows 会产生异常。

关于c# - 为什么我在打开连接时收到 "Invalid attempt to call HasRows when reader is closed"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13968342/

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