代码之家  ›  专栏  ›  技术社区  ›  Nikki

对象引用未设置为数据协定中对象的实例

  •  0
  • Nikki  · 技术社区  · 10 年前

    我试图通过数据契约发送从数据库获取的值。因为它的列表iv定义了数据契约中的列表。但我提到了错误。数据合同如下:

    [DataContract]
        public class a
        {
            [DataMember]
            public string SessionId { get; set; }
    
            [DataMember]
            public string StartDate { get; set; }
    
            [DataMember]
            public string EndDate { get; set; }
    
            [DataMember]
            public string p1 { get; set; }
    
            [DataMember]
            public string p2 { get; set; }
    
            [DataMember]
            public string p3 { get; set; }
    
            [DataMember]
            public string p4 { get; set; }
    
            [DataMember]
            public string p5 { get; set; }
    
            [DataMember]
            public string p6 { get; set; }
        }
    
        [DataContract]
        public class b : ReturnValuesBase
        {
            [DataMember]
            public List<a> abc;
        }
    

    在我的数据层中,函数定义如下:

    public b Search(string SessionId, string StartDate, string EndDate, string a, string b)
        {
            b abc = new b();
            try
            {
                SqlConnection CnStr = new SqlConnection();
                CnStr = new SqlConnection(ConnString);
                CnStr.Open();
                SqlCommand cmd = new SqlCommand("[dbo].[abc]", CnStr);
                SqlParameter prmSQL = new SqlParameter();
                cmd.CommandType = CommandType.StoredProcedure;
                DateTime SDate = Convert.ToDateTime(StartDate);
                DateTime EDate = Convert.ToDateTime(EndDate);
                prmSQL = cmd.Parameters.Add(new SqlParameter("@a", SqlDbType.VarChar, 50));
                if (CriticalOptions == "")
                {
                    prmSQL.Value = DBNull.Value;
                }
                else
                {
                    prmSQL.Value = a;
                }
                prmSQL = cmd.Parameters.Add(new SqlParameter("@StartDate", SqlDbType.DateTime));
                prmSQL.Value = SDate;
                prmSQL = cmd.Parameters.Add(new SqlParameter("@EndDate", SqlDbType.DateTime));
                prmSQL.Value = EDate;
                prmSQL = cmd.Parameters.Add(new SqlParameter("@Ma", SqlDbType.VarChar,50));
                prmSQL.Value = a;
                SqlDataReader DataReader = cmd.ExecuteReader();
                DataSet DS = new DataSet();
                SqlDataAdapter DataAdapter = new SqlDataAdapter();
                DataAdapter.SelectCommand = cmd;
                CnStr.Close();
                DataAdapter.Fill(DS);
                for (int i = 0; i < DS.Tables[1].Rows.Count; i++)
                {
                    DemoSearchList Demo_List = new DemoSearchList();
                    Demo_List.a=(Convert.ToString(DS.Tables[1].Rows[i]["a"]));
                    Demo_List.b=(Convert.ToString(DS.Tables[1].Rows[i]["b"]));
                    Demo_List.c=(Convert.ToString(DS.Tables[1].Rows[i]["c"]));
                    Demo_List.d=(Convert.ToString(DS.Tables[1].Rows[i]["d"]));
                    Demo_List.e=(Convert.ToString(DS.Tables[1].Rows[i]["e"]));
                    Demo_List.f = SessionId;
                    Demo_List.g = StartDate;
                    Demo_List.h = EndDate;
                    a.abc.Add(Demo_List);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return DemoSearchList;
        }
    

    我在这一行得到了错误:

    DemoSearchList.DemoSearchLists.Add(Demo_List);
    

    有人帮我解决这个问题吗

    4 回复  |  直到 10 年前
        1
  •  1
  •   Ehsan    10 年前

    你需要添加这一行

    if(DemoSearchList.DemoSearchLists == null)
       DemoSearchList.DemoSearchLists = new List<DemoSearchList>();
    

    之前

    DemoSearchList.DemoSearchLists.Add(Demo_List);
    
        2
  •  1
  •   nvoigt    10 年前

    DemoSearchList.DemoSearchLists为空。你需要打电话 new 在使用它之前:

    DemoSearchList.DemoSearchLists = new List<DemoSearchList>();
    
        3
  •  0
  •   Marius Bancila    10 年前

    这还不够:

    DemoList DemoSearchList = new DemoList();
    

    您还需要初始化其成员 DemoSearchLists 在你使用它之前。

    DemoSearchLists.DemoSearchLists = new List<DemoSearchList>();
    
        4
  •  0
  •   Linh Tuan    10 年前

    DemoSearchList.DemoSearchLists=空。在使用之前,您需要调用new:

    DemoList DemoSearchList = new DemoList();
    DemoSearchList.DemoSearchLists = new List<DemoSearchList>();