none
¿Cómo puedo mostrar dos noticias distintas con un ciclo do while?

    Pregunta

  • Hola amigos del foro:

    Mi consulta es la siguiente: ¿Cómo puedo mostrar dos noticias distintas con un ciclo do while? Uso asp.net 2.0 y C#

    Por ejemplo, las dos noticias tienen (Titulo, detalle, imagen). Hago un select top 2 para que me traiga las dos noticias que necesito, el problema es que no se como hacer el do while para que me muestre las dos noticias en los distintos label que tengo.

    using (SqlConnection cnn = new SqlConnection(Tradetalle))

            {

                cnn.Open();

                string sql = "select top 2 id, titulo, detalle, imagen from articulo order by id desc";

                SqlCommand cmd = new SqlCommand(sql, cnn);

                SqlDataReader reader = cmd.ExecuteReader();

     

                if (reader.Read())

                {

                  //do while Not reader.move ß aqui va mi problema

                    

    lbltitulo1.Text = Convert.ToString(reader["titulo"]);               

    lbldetalle1.Text = Convert.ToString(reader["detalle"]);

    foto1.Src = "~/App_Themes/default/images/" + Convert.ToString(reader["imagen"]);

     

    /* Con el select me trae bien la primera noticia, el problema va en como muestro la segunda noticia con do while*/

     

    Lbltitulo2.Text = Convert.ToString(reader["titulo"]);               

    Lbldetalle2.Text = Convert.ToString(reader["detalle"]);

    Foto2.Src = "~/App_Themes/default/images/" + Convert.ToString(reader["imagen"]);

                }

                cnn.Close();

            }  

     

    Pd: he intentado armar el cilco do while pero no me funciona… cualquier ayuda me sirve, ya que he buscado y no lo he podido integrar a mi codigo. Gracias =)  

    martes, 07 de septiembre de 2010 19:53

Respuestas

  • hola

    podrias implementar algo como esto

     

    using (SqlConnection cnn = new SqlConnection(Tradetalle))
    {
        cnn.Open();

        string sql = "select top 2 id, titulo, detalle, imagen from articulo order by id desc";
        SqlCommand cmd = new SqlCommand(sql, cnn);
       
        SqlDataReader reader = cmd.ExecuteReader();
       
        int count = 0;
        while(reader.Read())
        {
       
            switch(count)
            {
                case 0:
                    lbltitulo1.Text = Convert.ToString(reader["titulo"]);              
                    lbldetalle1.Text = Convert.ToString(reader["detalle"]);
                    foto1.Src = "~/App_Themes/default/images/" + Convert.ToString(reader["imagen"]);
                    break;
                case 1:
                    Lbltitulo2.Text = Convert.ToString(reader["titulo"]);              
                    Lbldetalle2.Text = Convert.ToString(reader["detalle"]);
                    Foto2.Src = "~/App_Themes/default/images/" + Convert.ToString(reader["imagen"]);
                    break;
            }
           
            count ++;
        }
        cnn.Close();
    }  

     

    como veras alli se recorre y segun el contador de registro es que carga un control u otro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 07 de septiembre de 2010 20:23

Todas las respuestas

  • hola

    podrias implementar algo como esto

     

    using (SqlConnection cnn = new SqlConnection(Tradetalle))
    {
        cnn.Open();

        string sql = "select top 2 id, titulo, detalle, imagen from articulo order by id desc";
        SqlCommand cmd = new SqlCommand(sql, cnn);
       
        SqlDataReader reader = cmd.ExecuteReader();
       
        int count = 0;
        while(reader.Read())
        {
       
            switch(count)
            {
                case 0:
                    lbltitulo1.Text = Convert.ToString(reader["titulo"]);              
                    lbldetalle1.Text = Convert.ToString(reader["detalle"]);
                    foto1.Src = "~/App_Themes/default/images/" + Convert.ToString(reader["imagen"]);
                    break;
                case 1:
                    Lbltitulo2.Text = Convert.ToString(reader["titulo"]);              
                    Lbldetalle2.Text = Convert.ToString(reader["detalle"]);
                    Foto2.Src = "~/App_Themes/default/images/" + Convert.ToString(reader["imagen"]);
                    break;
            }
           
            count ++;
        }
        cnn.Close();
    }  

     

    como veras alli se recorre y segun el contador de registro es que carga un control u otro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 07 de septiembre de 2010 20:23
  • Hola,
     
    > if (reader.Read())
     
    ¿no sería algo como:
     
    while (reader.Read())
     
    para que haya una iteración?
     
    Saludos.
     
     


    Fernando Gómez
    fermasmas.wordpress.com
    martes, 07 de septiembre de 2010 20:55
  • Hola Leandro, gracias por responder. Funciona solo el case 0, el case 1 no me trae los valores. 
    martes, 07 de septiembre de 2010 20:55
  • Si pongo int count = 1; ahi me trae la segunda noticia pero no la primera.

    Tengo una tabla con 5 noticias distintas y lo que necesito es mostrar las 5, pero al poder mostrar 2 ya podria hacerlo para mostrar las 5 noticias que necesito, seria cosa de modificar un poco el codigo.

     

    Por eso necesito utilizar el ciclo repetir o do while para poder mostrar todas las noticias en mi tabla (en este caso puntual son 2 noticias distintas).

     

    Gracias por ayudarme Leandro =)

    martes, 07 de septiembre de 2010 21:01
  • hola

    Fernando tiene razon no me di cuanta del if, debes reemplazarlo por el while, ya edite el post anterior para reflejar el cambio

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 07 de septiembre de 2010 21:03
  • Reemplazando el if por while funcionó perfecto.

     

    Muchas gracias Leandro y Fernando. Votando por uds.

    • Marcado como respuesta ManOrl martes, 07 de septiembre de 2010 21:10
    • Desmarcado como respuesta Leandro TuttiniMVP martes, 07 de septiembre de 2010 21:26
    martes, 07 de septiembre de 2010 21:10