2014-03-18 5 views
0

im пытается отправить значения, полученные из базы данных через контракт данных. поскольку его список iv определяет список в контракте данных. но я получаю упомянутую ошибку. контракт данных выглядит следующим образом:Ссылка на объект не установлена ​​в экземпляр объекта в datacontract

[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; 
    } 

в моей datalayer функция определяется следующим образом:

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); 

кто поможет мне на этом

+0

возможно дубликат [? Что такое NullReferenceException и как это исправить] (http://stackoverflow.com/questions/4660142/what-is -a-nullreferenceexception-and-how-do-i-fix-it) – nvoigt

ответ

1

вам нужно добавить эту строку

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

перед тем

DemoSearchList.DemoSearchLists.Add(Demo_List); 
+0

большое спасибо ... это отлично работает для меня – Nikki

+0

@NiranjanThrineshwar Рад, что это помогло. Тогда вы можете принять ответ. – Ehsan

1

DemoSearchList.DemoSearchLists имеет значение null. Вам нужно будет позвонить new для него, прежде чем использовать его:

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

Этого недостаточно:

DemoList DemoSearchList = new DemoList(); 

Вам также необходимо инициализируйте его член DemoSearchLists, прежде чем вы сможете его использовать.

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

DemoSearchList.DemoSearchLists = null. Вам нужно будет позвонить новый, прежде чем использовать его:

DemoList DemoSearchList = new DemoList(); 
DemoSearchList.DemoSearchLists = new List<DemoSearchList>(); 
Смежные вопросы