2015-09-28 7 views
0

Я пытаюсь сделать связь между объектами, использующими ADO.Используйте ключевое слово 'new'

public class Banner 
{ 
    public int IdBanner { get; set; } 
    public string NameBanner { get; set; } 
    public string Media { get; set; } 

    public Country Country{ get; set; } 
} 

public class Country 
{ 
    public int IdCountry { get; set; } 
    public string NameCountry { get; set; } 
} 

И в моем другом классе (DAL), у меня есть метод, и этот метод мне нужно вставить свойства внутри Country класса, как мой Exemple:

public List<Banner> Listar() 
{ 
      List<Banner> lista = new List<Banner>(); 

      using (SqlConnection conn = ConnectionDAL.GetConnection()) 
      { 
       String sql = "BannerListar"; 

       using (SqlCommand command = new SqlCommand(sql, conn)) 
       { 

        command.CommandType = CommandType.StoredProcedure; 

        try 
        { 
         conn.Open(); 

         SqlDataReader dr = command.ExecuteReader(); 

         while (dr.Read()) 
         { 
          Banner obj = new Banner(); 

          if (dr["IdBanner"] != DBNull.Value) 
           obj.IdBanner = Convert.ToInt32(dr["IdBanner"]); 

          if (dr["NameBanner"] != DBNull.Value) 
           obj.NameBanner = dr["NameBanner"].ToString(); 

          if (dr["Media"] != DBNull.Value) 
           obj.Media = dr["Media"].ToString(); 


       //HERE the problem 
          if (dr["NameCountry"] != DBNull.Value) 
           obj.Country.NameCountry = dr["NameCountry"].ToString(); 



          lista.Add(obj); 

         } 
        } 
        catch 
        { 
         throw; 
        } 

        finally 
        { 
         conn.Close(); 
         conn.Dispose(); 
        } 


        return lista; 

       } 

      } 

     } 

Когда я делаю это шоу для me erro вот так: «Используйте« новое »ключевое слово для создания экземпляра объекта« Как его исправить?

+0

На какой строке вы получаете сообщение об ошибке? – Adil

+0

Здесь: if (dr ["NameCountry"]! = DBNull.Value) obj.Country.NameCountry = dr ["NameCountry"]. ToString(); – user1887732

+0

В то время как ошибка есть. Ошибка в основном потому, что вы пытаетесь создать экземпляр какого-либо класса без нового ключевого слова. – Dnyanesh

ответ

1

Вы создали объект класса Banner, но объект, содержащийся в баннере класса Country не создается. Поэтому создайте его, прежде чем использовать его. Вы можете сделать это в стандартном конструкторе класса Banner.

public class Banner 
{ 
    public Banner() //Add the default constructor and initiate the Country object 
    { 
     Country = new Country(); 
    } 
    public int IdBanner { get; set; } 
    public string NameBanner { get; set; } 
    public string Media { get; set; } 

    public Country Country{ get; set; } 
} 

Я дал причину возможных проблем и предложил решение, которое будет избавиться от ошибки с минимальными усилиями и намеренно держал его простым для лучшего понимания. Вы можете расширить это, явно передав страну или передав null вместо страны или создайте объект Country и назначьте его объекту в Banner.

+0

Хотя это выглядит чистым, был бы случай, когда баннер не имеет ассоциированной с ним страны (например, столбец таблицы Banner.IdCountry разрешался принимать NULL в SQL). Это все равно даст действительную страну, а не несуществующую, чтобы представлять NULL из базы данных. – niksofteng

+1

Я использовал ваше решение! ТКС !! – user1887732

+0

@vnikhil спасибо, я указал на возможную причину ошибки и предложил способ избавиться от ошибки, чтобы упростить и сосредоточиться на проблеме. Я обновил ответ, предложив OP настроить в соответствии с требованиями. – Adil

3

вы должны создать объект класса страны до intializing NameCountry

if (dr["NameCountry"] != DBNull.Value) 
    { 
     Country country = new Country(); 
     country.NameCountry = dr["NameCountry"].ToString(); 
obj.Country = country; 
} 
+0

работает отлично, tks – user1887732

0

В Banner класса Страны является класс недвижимостью для класса Country. Поэтому, если вы добавили значение в это свойство, вам сначала нужно создать объект для этого класса.

Добавить ниже линии: -

obj.Country = new Country(); 
if (dr["NameCountry"] != DBNull.Value) 
    obj.Country.NameCountry = dr["NameCountry"].ToString();