quarta-feira, 23 de janeiro de 2008

Enviar email pelo .Net

No framework 2.0 para cima, você pode usar a classe SmtpClient para enviar um email em sua aplicação. Veja o código abaixo:

// Cria o cliente Smtp passando o endereço e porta do host
SmtpClient client = new SmtpClient();
client.Host = "smtp.seusitedeemail.com.br";
client.Port = 25;


// Passa o usuário e a senha se o servidor SMTP requer autenticação
client.Credentials = new NetworkCredential("usuario", "senha");



// Cria a mensagem a ser enviada
MailMessage msg = new MailMessage();
msg.From = new MailAddress("fulano@email.com.br", "Fulano");
msg.To.Add(new MailAddress("email1@provedor.com.br", "Destinatário 1");
msg.To.Add(new MailAddress("email2@provedor.com.br", "Destinatário 2");


msg.Subject = "Assunto da mensagem";
msg.Body = "Corpo da mensagem";



client.Send(msg);




P.S: Se estiver usando o framework 1.1, tente esse link :

http://msdn2.microsoft.com/en-us/library/system.web.mail.smtpmail(VS.71).aspx

Nunca usei essa classe, mas parece atender às necessidades.




sábado, 19 de janeiro de 2008

DataReader vs Dataset

Lá vai eu mais uma vez tentar ressuscitar esse blog. Vamos ver se dessa vez eu consigo :)

Um tema clássico em artigos sobre .Net é a rapidez do DataReader em comparação com o Dataset carregado por um DataAdapter. Isso realmente é verdade, mas não significa que você deva substituir todos os Datasets de sua aplicação por datareaders. Dependendo da forma que está utilizando o DataReader, ele pode ter a mesma performance que um DataSet*.

Primeiro é preciso entender porquê o DataReader é mais rápido que um DataSet*. A vantagem do DataReader consiste no fato de não precisar carregar todo o conteúdo da tabela em memória, e de retornar os registros à medida que são disponibilizados pelo banco.

Quando se usa o DataSet*, todos os registros retornados são carregados em memória, para depois serem processados. Já o DataReader carrega na memória apenas o registro atual, diminuindo assim os custos de memória da aplicação. Dessa forma, porém, não é possível acessar registros anteriores.

Outra vantagem é que o DataReader retorna os registros coforme forem sendo disponibilizado pelo banco, enquanto o DataSet aguarda o término da execução da procedure para prosseguir a execução, ou seja, a aplicação ficará parada enquanto isso.

Entretando, se você estiver usando o DataReader para ler todos os registros do banco e carregá-los na memória (Que é exatamente o que o DataAdapter faz, pois ele usa um DataReader) para então processá-los, estará anulando as duas vantagens do DataReader. Nesse caso seria melhor usar um DataSet, que teria a mesma performance e requeriria menos código.

Ou seja, um DataReader só será vantajoso se você carregar na memória apenas um registro de cada vez, e processar os registros um a um, conforme os ler do DataReader.

* - Sempre que eu mencionar o DataSet nesse artigo, como em "performance do DataSet", entenda que estou falando não só do DataSet, mas do processo de usar um DataAdapter para carregar os registros do banco em um DataSet.