2013-12-15 22 views
1

我一直在试图添加到列表添加信息从一个SQL数据库列表。添加新的信息,以列表时,我得到的错误是这样的:如何在不获取NULLREFERENCEEXCEPTION的情况下添加到列表中?

“类型‘System.NullReferenceException’发生在StatusScope.dll但在用户代码中没有处理

附加信息的一个例外:未将对象引用设置为一个对象的实例。“

我该如何解决这个错误?

MapLogic.cs

public static List<MapModel.ClientInfo> GetClientsData() 
    { 
     SqlConnection Connection = site.Models.Shared.DBConnection.GetConnection(); 
     SqlDataReader Reader = null; 
     SqlCommand Command = new SqlCommand("SELECT DocInfo.DocID, DocInfo.DocName, DocInfo.DocPic, DocInfo.PatientAcceptance, ClientInfo.ClientName, ClientInfo.AddressLocal, ClientInfo.AddressBroad, ClientInfo.Phone, ClientInfo.Lat, ClientInfo.Long, ClientInfo.ClientID FROM DocInfo INNER JOIN ClientInfo ON DocInfo.ClientID = ClientInfo.ClientID;", Connection); 
     Reader = Command.ExecuteReader(); 

     var ClientsData = new List<MapModel.ClientInfo> { }; 
     int IDCounter = 0; 
     bool FirstRun = false; 

     while (Reader.Read()) 
     { 
      if (!FirstRun) 
      { 
       ClientsData.Add(new MapModel.ClientInfo { Id = IDCounter, ClientID = Reader["ClientID"].ToString(), ClientName = Reader["ClientName"].ToString(), DocPic = Reader["DocPic"].ToString(), PatientAcceptance = Reader["PatientAcceptance"].ToString(), AddressLocal = Reader["AddressLocal"].ToString(), AddressBroad = Reader["AddressLocal"].ToString(), Phone = Reader["Phone"].ToString(), latitude = Reader["Lat"].ToString(), longitude = Reader["Long"].ToString(), DocNames = { } }); 
       FirstRun = true; 
      } 
      else 
      { 
       for (var x = 0; x < ClientsData.Count; x++) 
       { 
        if (ClientsData[x].ClientID == Reader["ClientID"].ToString()) 
        { 
         ClientsData[x].DocNames.Add("123"); //error occurs here 
        } 
        else 
        { 
         ClientsData.Add(new MapModel.ClientInfo { Id = IDCounter, ClientID = Reader["ClientID"].ToString(), ClientName = Reader["ClientName"].ToString(), DocPic = Reader["DocPic"].ToString(), PatientAcceptance = Reader["PatientAcceptance"].ToString(), AddressLocal = Reader["AddressLocal"].ToString(), AddressBroad = Reader["AddressLocal"].ToString(), Phone = Reader["Phone"].ToString(), latitude = Reader["Lat"].ToString(), longitude = Reader["Long"].ToString() }); 
        } 
       } 
      } 




      IDCounter++; 
     } 

     Connection.Close(); 
     return ClientsData; 
    } 

MapModel.cs

public class ClientInfo 
     { 
      public int Id { get; set; } 
      public string ClientID { get; set; } 
      public string ClientName { get; set; } 

      public List<string> DocNames { get; set; } 

      public string DocPic { get; set; } 

      public string PatientAcceptance { get; set; } 
      public string AddressLocal { get; set; } 
      public string AddressBroad { get; set; } 
      public string Phone { get; set; } 
      public string latitude { get; set; } 
      public string longitude { get; set; } 


     } 
+0

*“DocNames = {}”*这行是可疑的。 – Harrison

+0

更改公开列表 DocNames {get;组; }公开名单? DocNames {get;组; } –

回答

3

你有没有设置DocNames任何东西?如果不是,它将是空的。

在构造为ClientInfo你应该有

DocNames = new List<string>(); 

初始化一个空列表。

2

是不是有点ClientsData[x].DocNames测试是否是前加入空的情况?您可以将您的代码更改为

if(ClientsData[x].DocNames == null) { 
    ClientsData[x].DocNames = new List<string>(); 
} 

ClientsData[x].DocNames.Add("123"); 

使其始终有效。

+0

它说“列表()”上的错误需要一个类型参数 – user2138160

+1

使用'新列表()'怎么办? – Mauren

2

在您向ClientsData列表添加新MapModel.ClientInfo的两行中,您需要初始化DocNames为新的List(),否则无论何时尝试访问DocNames时,都始终为null。所以,在这两个地方你需要做到以下几点:

ClientsData.Add(new MapModel.ClientInfo     
{ 
    Id = IDCounter,      
    //. 
    //. removing code just to make my answer shorter 
    //. 
    DocNames = new List<string>() 
}); 
相关问题