datareader - 阅读器关闭时调用 FieldCount 的尝试无效

标签 datareader executereader

当我尝试对从数据库接收的数据执行 dataReader.Read 时,会发生上述错误。我知道那里有两行,所以它不是因为实际上没有数据存在。

可能是导致问题的 CommandBehavior.CloseConnection 吗?有人告诉我你必须在 ExecuteReader 之后立即执行此操作?它是否正确?

        try
        {
            _connection.Open();
            using (_connection)
            {
                SqlCommand command = new SqlCommand("SELECT * FROM Structure", _connection);
                SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);

                if (dataReader == null) return null;

                var newData = new List<Structure>();
                while (dataReader.Read())
                {
                    var entity = new Structure
                    {
                        Id = (int)dataReader["StructureID"],
                        Path = (string)dataReader["Path"],
                        PathLevel = (string)dataReader["PathLevel"],
                        Description = (string)dataReader["Description"]
                    };

                    newData.Add(entity);
                }
                dataReader.Close();

                return newData;
            }
        }
        catch (SqlException ex)
        {
            AddError(new ErrorModel("An SqlException error has occured whilst trying to return descendants", ErrorHelper.ErrorTypes.Critical, ex));
            return null;
        }
        catch (Exception ex)
        {
            AddError(new ErrorModel("An error has occured whilst trying to return descendants", ErrorHelper.ErrorTypes.Critical, ex));
            return null;
        }
        finally
        {
            _connection.Close();
        }
    }

提前感谢您的帮助。

克莱尔

最佳答案

如图所示,您的代码很好。我已经把它带入了一个测试项目,它可以工作。目前尚不清楚为什么您会使用上面显示的代码收到此消息。以下是一些调试提示/建议。我希望它们对你有值(value)。

  • while (dataReader.Read()) 上创建断点.在它进入其代码块之前,在您的即时或观察窗口中输入:dataReader.HasRows .那应该评估为真。
  • 虽然停在那里Read() ,打开您的 Locals 窗口以检查 dataReader 的所有属性.确保 FieldCount 是您对 SELECT 的期望值。陈述。
  • 当踏入这Read()迭代,是否创建了一个学生对象? dataReader["StructureID"] 的值是多少?以及即时窗口中的所有其他人?

  • 这不是 CommandBehavior.CloseConnection导致问题。这只是告诉连接在您关闭数据读取器时也会自行关闭。

    关于datareader - 阅读器关闭时调用 FieldCount 的尝试无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3465490/

    相关文章:

    c# - 选择到数组中

    c# - 查询包 - MySQL

    c# - C# WPF 中的 MySql 到 .text

    c# - 如何只从 SqlDataReader 中获取一些行?

    c# - 在 C# 中结合 SQL `raiserror` 和 `select`

    C# MySQL ExecuteReader

    c# - 无法从 SqlDataReader 读取数据

    c# - 使用数据读取器使用数据库多列中的数据填充文本框

    python - Pandas : Missing values from Yahoo Finance

    c# - 在 C# 中处理 DBNull