ошибка чтения таблицы: «Ссылка на объект не установлена ​​на экземпляр объекта». - PullRequest
0 голосов
/ 29 февраля 2012

мой код для создателя рабочей книги.

метод берет вопросы из БД и помещает их в список.

Я пытаюсь поместить данные в мой список вопросов, у меня есть класс вопросов и метод getpageDB, но все еще появляется ошибка "Ссылка на объект не установлена ​​на экземпляр объекта."

public DataSet getPageDB(string myQuery, string ConnStr)
{


   OleDbDataAdapter oda = new OleDbDataAdapter   (myQuery, ConnStr);
    DataSet ds = new DataSet();
    oda.Fill(ds);

    foreach(DataRow pRow in ds.Tables[0].Rows){


        _currentQuest.question=pRow["question"].ToString();
        _currentQuest.questionNumber =Convert.ToInt16( pRow["questionnumber"]);
        _currentQuest.rightAnswer=pRow["answer"].ToString();
        _currentQuest.goodFeedBack=pRow["goodfeedback"].ToString();
        _currentQuest.badFeedBack1=pRow["badfeedback1"].ToString();
         _currentQuest.badFeedBack2=pRow["badfeedback2"].ToString();
        AllQuestions.Add(_currentQuest);


    }
    return ds;

}

ошибка, которую я получаю:

Ссылка на объект не установлена ​​для экземпляра объекта.

что означает эта ошибка? в чем проблема?

Ответы [ 6 ]

2 голосов
/ 19 октября 2012

всегда инициализируйте класс перед доступом к свойству / членам класса.

Например;

class objcls = null;

objcls = new class ();

objcls.name = "Переполнение стека";

0 голосов
/ 29 февраля 2012

Ошибка ссылки на объект означает, что один или несколько ваших объектов имеют значение null, и вы пытаетесь получить доступ к методу или свойству этого объекта.

Может быть несколько мест, где ваш код может сломаться:

public DataSet getPageDB(string myQuery, string ConnStr)
{
    OleDbDataAdapter oda = new OleDbDataAdapter   (myQuery, ConnStr);
    DataSet ds = new DataSet();
    oda.Fill(ds);

    foreach(DataRow pRow in ds.Tables[0].Rows){ //here if there are no tables in the dataset. So you must check if(ds.Tables.Count > 0) before executing the for loop.

         //What is _currentQuest? Have you initialised it with a new keyword? Is it null when you try to use it?
        _currentQuest.question=pRow["question"].ToString();
        _currentQuest.questionNumber =Convert.ToInt16( pRow["questionnumber"]);
        _currentQuest.rightAnswer=pRow["answer"].ToString();
        _currentQuest.goodFeedBack=pRow["goodfeedback"].ToString();
        _currentQuest.badFeedBack1=pRow["badfeedback1"].ToString();
        _currentQuest.badFeedBack2=pRow["badfeedback2"].ToString();

        //What is AllQuestions? make sure that this is not null.
        AllQuestions.Add(_currentQuest);

    }
    return ds;

}
0 голосов
/ 29 февраля 2012

Похоже, набор данных пуст.Это означает, что вам нужно сначала изучить ваш запрос.Он не выполняется правильно и, следовательно, не заполняет набор данных, который, в свою очередь, не имеет какой-либо строки, и когда вы запускаете цикл foreach ... это вызывает ошибку.Для этого вы можете отладить свой код и выяснить, куда именно он генерирует исключение.

0 голосов
/ 29 февраля 2012

Попробуйте создать экземпляр каждого объекта перед использованием с оператором NEW . Вы узнаете об объекте путем отладки. Пожалуйста, попробуйте отладить и найти, какая строка выдает ошибку.

0 голосов
/ 29 февраля 2012

Вам всегда нужен новый Instnace вашего _currentQuest!

Перед добавлением значений в ваш вопрос, вопросник и т. Д. Напишите

_currentQuest = новый вопрос ();

0 голосов
/ 29 февраля 2012

Как говорится, вы пытаетесь получить доступ к классу объектов, который не был создан.

Попробуйте запустить в режиме отладки, чтобы увидеть, какая строка выдает ошибку.

Например, вы создали экземпляр _ currentQuest или AllQuestions, прежде чем пытаться их использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...