我想把数据库中的数据读出,存放在集合里,访问时可以简单点
        
        /// <summary>
        /// 根据任务状态获取任务集合
        /// </summary>
        /// <param name="OkOrNot">任务的状态</param>
        /// <returns>这个状态的任务集合</returns>
        private Collection<Class_task> GetTaskbyOkOrNot(string okornot)
        {
            Collection<Class_task> task = new Collection<Class_task>();            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                conn.Open();                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_Task where OkOrNot='true' ";
                    //cmd.Parameters.Add(new SqlParameter("@okornot",SqlDbType.Char,6,okornot));                    using (SqlDataReader read = cmd.ExecuteReader())
                    {
                        while (read.Read())
                        {
                            Class_task newTask = new Class_task();
                            //读出任务                            newTask.TaskName = read.GetString(read.GetOrdinal("Name"));
                            newTask.Source = read.GetString(read.GetOrdinal("source"));
                            newTask.Goal = read.GetString(read.GetOrdinal("goal"));
                            newTask.StartTime = read.GetDateTime(read.GetOrdinal("StartTime"));
                            newTask.OverTime = read.GetDateTime(read.GetOrdinal("OverTime"));
                            //把任务加到集合中
                            task.Add(newTask);
                        }
                    }
                }
                return task;
            }
        }
但当我调用的集合里的数据时,就会报错:“未将对象引用设置到对象的实例”;是不是集合里的对象没有实例化?可是要是实例化的话,还不能用循环实例化,不然,也提示“未将对象引用设置到对象的实例”。原以为用集合会简单方便点呢。。求帮助

解决方案 »

  1.   

    只是测试下能不能用 调用的代码:            Collection<Class_task> taskList = new Collection<Class_task>();
                taskList = GetTaskbyOkOrNot("true");            for (int i = 0; i < taskList.Count; i++) 
                {
                    MessageBox.Show(taskList[i].TaskName + "\n" + taskList[i].Source);
                }
      

  2.   


    taskList = GetTaskbyOkOrNot("true");
    此处加断点跟到方法里面去看一下 光看代码看不出你写的有什么问题
      

  3.   

    单步调试,看看是哪里为null了
      

  4.   

    ...我逐语句运行了下,结果看到  while (read.Read())
                            {
                                Class_task newTask = new Class_task();
                                //读出任务
     
                                newTask.TaskName = read.GetString(read.GetOrdinal("Name"));
                                newTask.Source = read.GetString(read.GetOrdinal("source"));
                                newTask.Goal = read.GetString(read.GetOrdinal("goal"));
                                newTask.StartTime = read.GetDateTime(read.GetOrdinal("StartTime"));
                                newTask.OverTime = read.GetDateTime(read.GetOrdinal("OverTime"));
                                //把任务加到集合中
                                task.Add(newTask);
                            }语句执行后,对象的属性值依然为null,我找下原因
      

  5.   

    结果好像是类有问题只是不知道为什么
                                
    string name = (string)read["Name"];
     newTask.TaskName = (string)read["Name"];执行后,name有值,而newTask.TaskName的值依旧为null......
      

  6.   

    使用集合泛型集合List,代码如下        /// <summary>
            /// 根据任务状态获取任务集合
            /// </summary>
            /// <param name="OkOrNot">任务的状态</param>
            /// <returns>这个状态的任务集合</returns>
            private List<Class_task> GetTaskbyOkOrNot(string okornot)
            {
                List<Class_task> task = new List<Class_task>();            using (SqlConnection conn = new SqlConnection(ConnectionString))
                {
                    conn.Open();                using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "select * from T_Task where OkOrNot='true' ";
                        //cmd.Parameters.Add(new SqlParameter("@okornot",SqlDbType.Char,6,okornot));                    using (SqlDataReader read = cmd.ExecuteReader())
                        {
                            while (read.Read())
                            {
                                Class_task newTask = new Class_task();
                                //读出任务
                                newTask.TaskName = read["Name"].ToString();
                                newTask.Source = read["source"].ToString(); read.GetString(read.GetOrdinal("source"));
                                newTask.Goal = read["goal"].ToString(); read.GetString(read.GetOrdinal("goal"));
                                newTask.StartTime = DateTime.Parse(read["StartTime"].ToString());
                                newTask.OverTime = DateTime.Parse(read["OverTime"].ToString());
                                //把任务加到集合中
                                task.Add(newTask);
                            }
                        }
                    }
                    return task;
                }
            }
      

  7.   

    好把 我承认是我大意   private string source;            //源文件夹的路径
            public string Source
            {
                get { return source; }
                set { source = Source; }
            }把value写成了属性,造成无论赋值什么,都不能给字段赋值,返回的都是字段的初始值null...
    谢谢大家了