sábado, 7 de abril de 2012

Diferenças entre ExecuteReader, ExecuteNonQuery, ExecuteScalar

Diferenças entre ExecuteReader, ExecuteNonQuery, ExecuteScalar. Quando usar e qual usar?

02/12/2010 | 23h23min por Cesar Cassiano Schimanco


Veja as diferenças entre ambos, suas aplicações e exemplos de como usa-los.

ExecuteScalar - Retorna apenas um valor após a execução de uma consulta.
Use quando quiser um valor apenas (uma linha e uma coluna).
por exemplo para pegar o total de registros de uma tabela.
Exemplo:
using (SqlConnection Conn = new SqlConnection(sConnectionString))
{
string sSQL = "SELECT COUNT(*) FROM tblUsuarios";
SqlCommand myCommand = new SqlCommand(sSQL, Conn);
Conn.Open();
int iTotal = (int)myCommand.ExecuteScalar();
Response.Write(iTotal);
Conn.Close();
}
ExecuteReader - Retorna um DataReader com os dados da consulta e executa apenas o comando SELECT.
Use quando for preencher um DropDownList, CheckBoxList, RadioButtonList
ExecuteReader é somente leitura e pode ser usado para outros fins tambem, veja nos exemplos.
Exemplo 1: (Populando/Preenchendo um DropDownList com usuários)
using (SqlConnection Conn = new SqlConnection(sConnectionString))
{
string sSQL = @"SELECT id, nome
FROM tblUsuarios
ORDER BY nome";
SqlCommand myCommand = new SqlCommand(sSQL, Conn);
Conn.Open();
SqlDataReader dr = myCommand.ExecuteReader();
ddlUsuarios.DataSource = dr;
ddlUsuarios.DataTextField = "nome";
ddlUsuarios.DataValueField = "id";
ddlUsuarios.DataBind();
Conn.Close();
}
Exemplo 2:
using (SqlConnection Conn = new SqlConnection(sConnectionString))
{
string sSQL = @"SELECT id, nome
FROM tblUsuarios
ORDER BY nome";
SqlCommand myCommand = new SqlCommand(sSQL, Conn);
Conn.Open();
SqlDataReader dr = myCommand.ExecuteReader();
while (dr.Read())
{
Response.Write(
"id = " + dr["id"] + " - " +
" nome = " + dr["nome"] + "<br />"
);
}
dr.Close();
Conn.Close();
}
ExecuteNonQuery - Não retorna dados, é utilizado geralmente para fazer Inserts e Updates
Use para inserir, atualizar e apagar dados do banco de dados.
Exemplo:
using (SqlConnection Conn = new SqlConnection(sConnectionString))
{
string sSQL = "DELETE FROM tblUsuarios WHERE id = @id";
SqlCommand myCommand = new SqlCommand(sSQL, Conn);
myCommand.Parameters.AddWithValue("@id", 5);
Conn.Open();
myCommand.ExecuteNonQuery();
Conn.Close();
}