none
Resgatar valor dos rows RRS feed

  • Pergunta

  • Boa noite a todos.

    Estou criando um codigo que envia email para "n" destinatários pre-selecionados. Já estou conseguindo enviar para um destinatário. Vou explicar o problema. Segue o codigo.


                    using (OdbcConnection con = new OdbcConnection(consultarString))
                    {
                        con.Open();

                        OdbcCommand command = con.CreateCommand();

                        OdbcCommand comm = new OdbcCommand("SELECT Email FROM user WHERE Admin_ID=1 AND Grupo_ID=2", con);
                        OdbcDataReader leitura = comm.ExecuteReader();

                        if (leitura.HasRows)
                        {
                            for (int i = 0; i > leitura.RecordsAffected; i++)
                            {
                                MailMessage objEmail = new MailMessage();
                                objEmail.To = leitura.GetString(i);
                                objEmail.From = "xxxxx@hotmail.com";
                                objEmail.Subject = "Confirmação de consulta";
                                objEmail.Body = "O seguinte documento foi consultado: " + PreviousPage.NomeDoc;
                                objEmail.Priority = MailPriority.High;
                                try
                                {
                                    SmtpMail.Send(objEmail);
                                }
                                catch (Exception exc)
                                {

                                }
                            }
                        }

    A verificação pega o valor correto em leitura.GetString(0); e manda o email. Mas quando passa pelo FOR novamente, com o codigo leitura.GetString(1); ele diz que não existe o indice 1. E realmente não existe, já que no select só tem um item (que é o "Email"). Mas qual codigo posso usar para pegar os itens encontrados na coluna "Email"?

    Desde já agradeço !
    domingo, 13 de dezembro de 2009 00:47

Respostas

  • Obrigado Wesley e Ari, o método sugerido pelo Wesley funcionou corretamente.

    Um grande abraço !
    • Marcado como Resposta Senfft sexta-feira, 18 de dezembro de 2009 14:35
    sexta-feira, 18 de dezembro de 2009 14:35

Todas as Respostas

  • Tente mudar no local do for utilizar:

    while (leitura.Read())
      {
                                MailMessage objEmail = new MailMessage();
                                objEmail.To = leitura["Nomecoluna"].ToString();
     objEmail.From = "xxxxx@hotmail.com"; objEmail.Subject = "Confirmação de consulta"; objEmail.Body = "O seguinte documento foi consultado: " + PreviousPage.NomeDoc; objEmail.Priority = MailPriority.High; try { SmtpMail.Send(objEmail); } catch (Exception exc) { } }

    • Sugerido como Resposta Ari C. Raimundo quarta-feira, 16 de dezembro de 2009 02:57
    quarta-feira, 16 de dezembro de 2009 00:11
  • Opa Wesley, obrigado pelo seu retorno, mas na verdade eu achei a solução realizando uma alteração no SELECT do MySql (usei o comando LIMIT). Veja como ficou:

                        for (int i = 0; i < leitura.RecordsAffected; i++)
                        {
                            OdbcCommand comm = new OdbcCommand("SELECT Email FROM user LIMIT " + i + ",1", con);
                            OdbcDataReader leitura2 = comm.ExecuteReader();

                            if (leitura2.HasRows)
                            {
                                MailMessage objEmail = new MailMessage();
                                objEmail.To = leitura2.GetString(0);
                                objEmail.From = "xxxxxx@hotmail.com";
                                objEmail.Subject = "Apenas um teste";
                                objEmail.Body = "Apenas um teste";
                                objEmail.Priority = MailPriority.High;
                                SmtpMail.SmtpServer = "localhost";
                                try
                                {
                                    SmtpMail.Send(objEmail);
                                }
                                catch (Exception exc)
                                {

                                }
                            }
                        }

    Abração e muito obrigado !
    quarta-feira, 16 de dezembro de 2009 02:52
  • Senfft,

    A sugestão do Wesley é mais correta do que a abordagem que você está utilizando. Não tem porque enviar diversos comandos para a base de dados se você pode enviar somente uma vez.

    Att.

    Ari C. Raimundo
    quarta-feira, 16 de dezembro de 2009 02:58
  • Realmente Ari. Sou novato na programação e tem coisas que ainda não percebo...

    A partir de amanha estarei testando o método do Wesley, e volto a postar aqui o resultado.

    Um grande abraço !!
    quarta-feira, 16 de dezembro de 2009 03:10
  • Obrigado Wesley e Ari, o método sugerido pelo Wesley funcionou corretamente.

    Um grande abraço !
    • Marcado como Resposta Senfft sexta-feira, 18 de dezembro de 2009 14:35
    sexta-feira, 18 de dezembro de 2009 14:35
  • OK. Obrigado pelo Feedback.
    sexta-feira, 18 de dezembro de 2009 16:31