2013-12-15 27 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>() 
}); 
相關問題