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

Publicado: 01/05/2013 em Backup, Bases de Dados, Certificações, Cotidiano, Internet, Microsoft, Programação, Sistemas Operacionais, Softwares, SQL, Truques & Dicas, Tutoriais / Info
Tags:, ,

Dica

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

ExecuteScalar – O objeto Command fornece o método ExecuteScalar que permite retornar um valor único de uma fonte de dados. Este método executa uma consulta e retorna a primeira coluna da primeira linha do conjunto de registros retornado. O conjunto de registros pode conter múltiplas linhas mas o método ExecuteScalar irá ignorá-las.

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 

O método ExecuteNonQuery retorna o número de linhas afetados pelas operações de Insert , Update e Delete. Para todas as demais consultas o valor retornado é -1.

Quando uma consulta falha na execução o provedor gerenciado dispara uma exceção que você pode capturar no seu código.

.

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();
}

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s