none
como enviar correos masivos en c# windows form RRS feed

  • Pregunta

  • tengo una tabla en base de datos que guarda correos de clientes y lo que necesito es sacar esos correos para pasarlos a un txt saparados por una ","

    // tengo este codigo que se carga al abrir el formulario
    // pero solo carga el ultimo dato de la tabla.
    // no carga todo los datos
    MySqlCommand cmd = new MySqlCommand("Select correo_persona from tb_cliente_normal", conexion.obtenerConexion());
                    MySqlDataReader dr = cmd.ExecuteReader();
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            dr.Read();
                            txtpara.Text = dr["correo_persona"].ToString();
    
                            conexion.obtenerConexion().Close();
                            dr.Close();
                        }
    
                    }


    lunes, 6 de noviembre de 2017 19:20

Respuestas

  • Buenas,

    Varias cosas, en primer lugar, solo se te guarda el ultimo porque estas haciendo una asignación 

    txtpara.Text = dr["correo_persona"].ToString();

    en cada itercion, por lo tanto se borra lo anterior para meter lo nuevo, para lo que estas haciendo tendrías que hacerlo así:

    txtpara.Text += dr["correo_persona"].ToString();

    de todos modos, por como trabaja el framework con los strings, no es eficiente concatenar strings así, hay una clase llamada StringBuilder que lo hace de manera eficiente . La manera más eficiente de hacerlo seria así:

    StringBuilder sb = new StringBuilder();
    
    MySqlCommand cmd = new MySqlCommand("Select correo_persona from tb_cliente_normal", conexion.obtenerConexion());
    using(MySqlDataReader dr = cmd.ExecuteReader())
    {  
        while (dr.Read())
        {
            //Este if hace que en todas las iteraciones salvo en la primera, se añada una coma ',' antes de el siguiente texto
            if(sb.Length > 0) sb.Append(",");        
            sb.Append(dr["correo_persona"].ToString());               
        }   
    }
    
    txtpara.Text = sb.ToString();
    
    conexion.obtenerConexion().Close();      
    Si te fijas, también he cambiado un poco tu MySqlDaraReader, para enclausularlo en un using, de tal manera que no es necesario llamar al close al acabar de usarlo, y te aseguras de que siempre se liberan los recursos al salir del bloque del using (se puede usar con todo aquello que implemente la interfaz IDisposable)

    Echale un ojo, y si tienes dudas nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    lunes, 6 de noviembre de 2017 19:51

Todas las respuestas

  • Buenas,

    Varias cosas, en primer lugar, solo se te guarda el ultimo porque estas haciendo una asignación 

    txtpara.Text = dr["correo_persona"].ToString();

    en cada itercion, por lo tanto se borra lo anterior para meter lo nuevo, para lo que estas haciendo tendrías que hacerlo así:

    txtpara.Text += dr["correo_persona"].ToString();

    de todos modos, por como trabaja el framework con los strings, no es eficiente concatenar strings así, hay una clase llamada StringBuilder que lo hace de manera eficiente . La manera más eficiente de hacerlo seria así:

    StringBuilder sb = new StringBuilder();
    
    MySqlCommand cmd = new MySqlCommand("Select correo_persona from tb_cliente_normal", conexion.obtenerConexion());
    using(MySqlDataReader dr = cmd.ExecuteReader())
    {  
        while (dr.Read())
        {
            //Este if hace que en todas las iteraciones salvo en la primera, se añada una coma ',' antes de el siguiente texto
            if(sb.Length > 0) sb.Append(",");        
            sb.Append(dr["correo_persona"].ToString());               
        }   
    }
    
    txtpara.Text = sb.ToString();
    
    conexion.obtenerConexion().Close();      
    Si te fijas, también he cambiado un poco tu MySqlDaraReader, para enclausularlo en un using, de tal manera que no es necesario llamar al close al acabar de usarlo, y te aseguras de que siempre se liberan los recursos al salir del bloque del using (se puede usar con todo aquello que implemente la interfaz IDisposable)

    Echale un ojo, y si tienes dudas nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    lunes, 6 de noviembre de 2017 19:51
  • 10000000000 gracias =)
    miércoles, 8 de noviembre de 2017 1:28