表读取错误:“对象引用未设置为对象的实例。”

时间:2012-02-29 12:02:57

标签: c# dataset

我的代码适用于工作簿创建者。

该方法从DB中获取问题并将其放入列表中。

我正在尝试将数据放入我的问题列表中,我有一个问题类和一个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 个答案:

答案 0 :(得分:2)

在访问类的属性/成员之前始终初始化类。

对于前任;

class objcls = null;

objcls = new class();

objcls.name =“堆栈溢出”;

答案 1 :(得分:0)

正如它所说,您正在尝试访问尚未实例化的对象类。

尝试在debug中运行以查看哪一行引发错误。

例如,在尝试使用它们之前,您是否已实例化_ currentQuestAllQuestions

答案 2 :(得分:0)

您总是需要_currentQuest的新Instanace!

在为问题添加值之前,问题编号等等写

_currentQuest = new Question();

答案 3 :(得分:0)

尝试在使用 NEW 运算符之前实例化每个对象。 您可以通过调试了解该对象。请尝试调试并找到哪一行引发错误。

答案 4 :(得分:0)

看起来数据集是空的。这意味着您需要先查看您的查询。它没有正确执行,因此mot填充数据集,而数据集又没有任何行,当你启动foreach循环时,它就是抛出错误。为此,您可以调试代码并找出它正在抛出和异常的位置。

答案 5 :(得分:0)

对象引用错误意味着您的一个或多个对象的值为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;

}