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 de consulta, mas retorna o número de linhas afetadas em UPDATE, INSERT e DELETE (para os demais retornará -1), é utilizado geralmente para fazer Inserts, Updates e Deletes
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();
}