1

我需要获取数据库中可用的所有动物并将其显示在控制台中。我已经尝试了下面的代码,但我得到了“NullReference Exception”(对象引用未设置为对象的实例。)。让我知道我是否遵循正确的方法。

代码:

static void Main(string[] args)
{
    AnimalListDao objDao = new AnimalListDao();
    objDao.getPetAnimalList();
    AnimalList objAnim = new AnimalList();
    foreach(var item in objAnim.animalListObj)     // Null Reference Exception occurs here
    {
         Console.WriteLine(item.Animals);
         Console.ReadLine();
    }
}

商务课程:

class petAnimals
    {
        public string Animals { get; set; } 
    }

    class AnimalList
    {
        private List<petAnimals> _animalListObj;
        public List<petAnimals> animalListObj
        {
            get
            {
                return _animalListObj;
            }
            set
            {
                _animalListObj = value;
            }
        }
    }

    class AnimalListDao
    {
        AnimalList obAni = new AnimalList();
        petAnimals objAnimal = null;
        public void getPetAnimalList()
        {
            string commandStr = "select petAnimals from animal";
            string conStr = "Data Source=localhost;Initial Catalog=PetTable;UserId=root;Password=;";
            List<petAnimals> objList = new List<petAnimals>();
            MySqlConnection con = new MySqlConnection(conStr);
            MySqlCommand cmd = new MySqlCommand(commandStr,con);
            MySqlDataAdapter dap = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            dap.Fill(ds);
            foreach (DataRow dss in ds.Tables[0].Rows)
            {
                objAnimal = new petAnimals();
                objAnimal.Animals = dss["petAnimals"].ToString();
                objList.Add(objAnimal);
            }
            obAni.animalListObj = objList;
        }
    }
4

4 回答 4

2

乍一看,您正在创建一个AnimalList对象,但它并没有在任何地方填充。

我建议尝试这个:(假设该obAni字段是公开的AnimalListDao

static void Main(string[] args)
{
    AnimalListDao objDao = new AnimalListDao();
    objDao.getPetAnimalList();
    foreach(var item in objDao.obAni.animalListObj)   
    {
         Console.WriteLine(item.Animals);
         Console.ReadLine();
    }
}
于 2013-07-24T06:21:34.993 回答
0

在 AnimalList 类中修改列表声明代码如下

private List<petAnimals> _animalListObj=new List<petAnimals>();
于 2013-07-24T06:21:54.290 回答
0

尝试

AnimalList objAnim = new AnimalList();

objDao.getPetAnimalList();

代替

objDao.getPetAnimalList();

AnimalList objAnim = new AnimalList();

谢谢

于 2013-07-24T06:24:52.100 回答
0
AnimalListDao objDao = new AnimalListDao();

now the objDao is initial,and has nothing that is null !

you must execute this method:objDao.getPetAnimalList();

thus,objDao is filled by some datas and you can foreach it.
于 2013-07-24T06:27:50.160 回答