Diferenças entre ExecuteReader, ExecuteNonQuery, ExecuteScalar. Quando usar e qual usar?
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(); } |
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(); } |
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(); } |
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(); } |