none
DataReader RRS feed

  • Pergunta

  • Galera, boa tarde!

    Estou desenvolvendo uma batch que vai enviar e-mail de um relatório.

    O Envio de e-mail está ok!

    Quando recebo o conteúdo no meu e-mail, só está vindo o ultimo registro do banco. Queria que aparece todos que foram percorrido.

     Meu código.

                SqlConnection conexao = new SqlConnection("");
                SqlCommand comando = new SqlCommand(consulta, conexao);
                SqlDataReader dr = null;
    
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
                client.Host = "smtp.gmail.com";
                client.EnableSsl = true;
                client.Credentials = new System.Net.NetworkCredential("");
                MailMessage mail = new MailMessage();
                mail.Sender = new System.Net.Mail.MailAddress("");
                mail.From = new MailAddress("");
                mail.To.Add(new MailAddress(""));
                //mail.To.Add(new MailAddress("""));
                mail.Subject = "Relatório " + DateTime.Now;
                try
                {
                    conexao.Open();
                    dr = comando.ExecuteReader();
                    while (dr.Read())
                    {
                        mail.Body = " <table border=1> " +
                            "<tr>" +
                                  "<td><b>Data</b></td> " +
                                  "<td><b>Quantidade</b></td>" +
                                  "<td><b>Loja</b></td>" +
                            "</tr>" +
    
                               "<tr>" +
                                  "<td>" + dr["RegisterDate"].ToString() + "</td> " +
                                   "<td>" + dr["QUANTIDADE"].ToString() + "</td> " +
                                  "<td>" + dr["NickName"].ToString() + "</td> " +
                            "</tr>" +
                           " </table>";
                    }
                    
                    mail.IsBodyHtml = true;
                    mail.Priority = MailPriority.High;
                    try
                    {
                        client.Send(mail);
                    }
                    catch (System.Exception ex)
                    {
                      
                    }
                    finally
                    {
                        mail = null;
                    }
    
                }
                catch
                {
                    Console.WriteLine("Erro.");
                }
                finally
                {
                    dr.Close();
                    conexao.Close();
                }
    
            }

    Obrigado!

    terça-feira, 24 de março de 2015 18:41

Respostas

  • Tentei o seguinte (as alterações foram feitas no seu loop, já que vc não estava concatenando o HTML a cada iteração):

                SqlConnection conexao = new SqlConnection("");
                SqlCommand comando = new SqlCommand(consulta, conexao);
                SqlDataReader dr = null;
    
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
                client.Host = "smtp.gmail.com";
                client.EnableSsl = true;
                client.Credentials = new System.Net.NetworkCredential("");
                MailMessage mail = new MailMessage();
                mail.Sender = new System.Net.Mail.MailAddress("");
                mail.From = new MailAddress("");
                mail.To.Add(new MailAddress(""));
                //mail.To.Add(new MailAddress("""));
                mail.Subject = "Relatório " + DateTime.Now;
                try
                {
                    conexao.Open();
                    dr = comando.ExecuteReader();
    
                    // Alterar a partir deste ponto
                    var strbMailBody = new System.Text.StringBuilder();
                    strbMailBody.Append(" <table border=1> " +
                            "<tr>" +
                                  "<td><b>Data</b></td> " +
                                  "<td><b>Quantidade</b></td>" +
                                  "<td><b>Loja</b></td>" +
                            "</tr>");
    
                    while (dr.Read())
                    {
                        strbMailBody.Append(
                               "<tr>" +
                                  "<td>" + dr["RegisterDate"].ToString() + "</td> " +
                                   "<td>" + dr["QUANTIDADE"].ToString() + "</td> " +
                                  "<td>" + dr["NickName"].ToString() + "</td> " +
                               "</tr>");
                    }
                    strbMailBody.Append(" </table>");
                    mail.Body = strbMailBody.ToString(); // Fim das alterações
                    
                    mail.IsBodyHtml = true;
                    mail.Priority = MailPriority.High;
                    try
                    {
                        client.Send(mail);
                    }
                    catch (System.Exception ex)
                    {
                      
                    }
                    finally
                    {
                        mail = null;
                    }
    
                }
                catch
                {
                    Console.WriteLine("Erro.");
                }
                finally
                {
                    dr.Close();
                    conexao.Close();
                }
    
            }

    • Marcado como Resposta Felipe Torralvo terça-feira, 24 de março de 2015 20:00
    terça-feira, 24 de março de 2015 19:44

Todas as Respostas

  • Tentei o seguinte (as alterações foram feitas no seu loop, já que vc não estava concatenando o HTML a cada iteração):

                SqlConnection conexao = new SqlConnection("");
                SqlCommand comando = new SqlCommand(consulta, conexao);
                SqlDataReader dr = null;
    
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
                client.Host = "smtp.gmail.com";
                client.EnableSsl = true;
                client.Credentials = new System.Net.NetworkCredential("");
                MailMessage mail = new MailMessage();
                mail.Sender = new System.Net.Mail.MailAddress("");
                mail.From = new MailAddress("");
                mail.To.Add(new MailAddress(""));
                //mail.To.Add(new MailAddress("""));
                mail.Subject = "Relatório " + DateTime.Now;
                try
                {
                    conexao.Open();
                    dr = comando.ExecuteReader();
    
                    // Alterar a partir deste ponto
                    var strbMailBody = new System.Text.StringBuilder();
                    strbMailBody.Append(" <table border=1> " +
                            "<tr>" +
                                  "<td><b>Data</b></td> " +
                                  "<td><b>Quantidade</b></td>" +
                                  "<td><b>Loja</b></td>" +
                            "</tr>");
    
                    while (dr.Read())
                    {
                        strbMailBody.Append(
                               "<tr>" +
                                  "<td>" + dr["RegisterDate"].ToString() + "</td> " +
                                   "<td>" + dr["QUANTIDADE"].ToString() + "</td> " +
                                  "<td>" + dr["NickName"].ToString() + "</td> " +
                               "</tr>");
                    }
                    strbMailBody.Append(" </table>");
                    mail.Body = strbMailBody.ToString(); // Fim das alterações
                    
                    mail.IsBodyHtml = true;
                    mail.Priority = MailPriority.High;
                    try
                    {
                        client.Send(mail);
                    }
                    catch (System.Exception ex)
                    {
                      
                    }
                    finally
                    {
                        mail = null;
                    }
    
                }
                catch
                {
                    Console.WriteLine("Erro.");
                }
                finally
                {
                    dr.Close();
                    conexao.Close();
                }
    
            }

    • Marcado como Resposta Felipe Torralvo terça-feira, 24 de março de 2015 20:00
    terça-feira, 24 de março de 2015 19:44
  • Renato, obrigado.

    Deu certo!!

    terça-feira, 24 de março de 2015 19:59