Недопустимая попытка назвать FieldCount, когда средство чтения закрывается

Ошибка выше происходит, когда я пытаюсь сделать dataReader. Читайте на данных, полученных от базы данных. Я знаю, что существует две строки там, таким образом, это не, потому что никакие данные на самом деле не существуют.

Это мог быть 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();
        }
    }

Заранее спасибо за любую справку.

Clare

1
задан ClareBear 12 August 2010 в 07:16
поделиться

1 ответ

Ваш код, как показано, в порядке. Я взял его в тестовый проект, и он работает. Не сразу понятно, почему вы получаете это сообщение с указанным выше кодом. Вот несколько советов / предложений по отладке. Надеюсь, они вам дороги.

  • Создайте точку останова на while (dataReader.Read ()) . Прежде чем он введет свой кодовый блок, введите его в окне немедленного или контрольного просмотра: dataReader.HasRows . Это должно быть истиной.

  • Остановившись на Read () , откройте окно «Локальные», чтобы проверить все свойства dataReader . Убедитесь, что значение FieldCount соответствует вашему запросу SELECT .

  • При переходе к этой итерации Read () создается ли вообще объект ученика? Какое значение имеет dataReader ["StructureID"] и все остальные в окне Immediate Window?

Проблема не в CommandBehavior.CloseConnection . Это просто говорит о том, что соединение также закрывается, когда вы закрываете устройство чтения данных.

1
ответ дан 2 September 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: