¿Cuál es la diferencia entre ExecuteScalar, ExecuteReader y ExecuteNonQuery?

¿Cuáles son los diferentes casos cuando usamos estos tres? ¿Dónde debería usar uno y dónde no debería?

  • ExecuteScalar se usa normalmente cuando su consulta devuelve un valor único. Si devuelve más, el resultado es la primera columna de la primera fila. Un ejemplo podría ser SELECT @@IDENTITY AS 'Identity' .
  • ExecuteReader se utiliza para cualquier conjunto de resultados con múltiples filas / columnas (por ejemplo, SELECT col1, col2 from sometable ).
  • ExecuteNonQuery se usa típicamente para declaraciones de SQL sin resultados (por ejemplo, ACTUALIZAR, INSERTAR, etc.).

ExecuteNonQuery ():

  1. solo funcionará con Consultas de acción (Crear, Alterar, Quitar, Insertar, Actualizar, Eliminar).
  2. Devuelve el recuento de filas efectuadas por la consulta.
  3. El tipo de devolución es int
  4. El valor de retorno es opcional y se puede asignar a una variable entera.

ExecuteReader ():

  1. funcionará con las Consultas de Acción y Sin Acción (Seleccionar)
  2. Devuelve la colección de filas seleccionadas por la consulta.
  3. El tipo de devolución es DataReader.
  4. El valor devuelto es obligatorio y debe asignarse a otro objeto DataReader.

ExecuteScalar ():

  1. funcionará con consultas sin acción que contienen funciones agregadas.
  2. Devuelve la primera fila y el primer valor de la columna del resultado de la consulta.
  3. El tipo de devolución es un objeto.
  4. El valor de retorno es obligatorio y debe asignarse a una variable del tipo requerido.

URL de referencia:

http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html

Cada uno es una ejecución de tipo diferente.

  • ExecuteScalar será el tipo de consulta que devolverá un único valor.

    Un ejemplo sería devolver una identificación generada después de insertarla.

    INSERT INTO my_profile (Address) VALUES ('123 Fake St.'); SELECT CAST(scope_identity() AS int)

  • ExecuteReader le ofrece un lector de datos que le permitirá leer todas las columnas de los resultados una fila a la vez.

    Un ejemplo sería extraer información de perfil para uno o más usuarios.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery es cualquier SQL que no devuelve valores, pero en realidad está realizando alguna forma de trabajo como insertar eliminar o modificar algo.

    Un ejemplo sería actualizar el perfil de un usuario en la base de datos.

    UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'

De los documentos (nota: ¡MSDN es un recurso útil cuando quieres saber qué hacen las cosas!):

ExecuteScalar

Use el método ExecuteScalar para recuperar un único valor (por ejemplo, un valor agregado) de una base de datos. Esto requiere menos código que usar el método ExecuteReader y luego realizar las operaciones que necesita para generar el valor único utilizando los datos devueltos por un SqlDataReader.

ExecuteReader

Envía CommandText a Connection y crea un SqlDataReader.

… y desde SqlDataReader …

Proporciona una forma de leer una secuencia de filas de solo avance de una base de datos de SQL Server. Esta clase no puede heredarse.

ExecuteNonQuery

Puede usar ExecuteNonQuery para realizar operaciones de catálogo (por ejemplo, consultar la estructura de una base de datos o crear objetos de base de datos como tablas) o cambiar los datos en una base de datos sin usar un DataSet ejecutando instrucciones UPDATE, INSERT o DELETE.

Para agregar a lo que otros publicaron:

ExecuteScalar conceptualmente devuelve la columna más a la izquierda de la primera fila del conjunto de resultados de la consulta; podría ejecutar ExecuteScalar a SELECT * FROM staff, pero solo obtendría la primera celda de las filas resultantes. Normalmente se utiliza para las consultas que devuelven un único valor. No estoy 100% seguro acerca de SQLServer pero en Oracle, no lo usaría para ejecutar una FUNCIÓN (un código de base de datos que devuelve un solo valor) y esperar que le brinde el valor de retorno de la función aunque las funciones devuelvan valores únicos. Sin embargo, si está ejecutando la función como parte de una consulta, p. Ej., SELECCIONAR SUBSTR (‘abc’, 1, 1) FROM DUAL, le daría el valor de retorno en virtud del hecho de que el valor de retorno está almacenado en la parte superior izquierda celda del conjunto de filas resultante

ExecuteNonQuery se usaría para ejecutar procedimientos almacenados en la base de datos, funciones y consultas que modifican los datos (INSERT / UPDATE / DELETE) o modifican la estructura de la base de datos (CREATE TABLE …). Típicamente, el valor de retorno de la llamada es una indicación de cuántas filas se vieron afectadas por la operación, pero revise la documentación de DB para garantizar esto.

ExecuteReader() ejecuta una consulta SQL que devuelve el objeto DBDataReader del proveedor de datos que proporciona acceso directo y de solo lectura para el resultado de la consulta.

ExecuteScalar() es similar al método ExecuteReader() diseñado para la consulta singleton, como la obtención de un recuento de registros.

ExecuteNonQuery() ejecuta non query que funciona con create, delete, update, insert)

ExecuteNonQuery

Este método ExecuteNonQuery se usará solo para insertar, actualizar y eliminar, crear y establecer sentencias. El método ExecuteNonQuery devolverá el número de filas efectuadas con las operaciones INSERT, DELETE o UPDATE.

ExecuteScalar

Es muy rápido recuperar valores individuales de la base de datos. Execute Scalar devolverá el valor de una sola fila de una sola columna, es decir, un valor único, en la ejecución de SQL Query o procedimiento almacenado utilizando el objeto de comando. ExecuteReader

Execute Reader se usará para devolver el conjunto de filas, en la ejecución de SQL Query o el procedimiento almacenado utilizando el objeto de comando. Éste es solo la recuperación de registros hacia adelante y se usa para leer los valores de la tabla desde el principio hasta el final.

El método ExecuteNonQuery devolverá el número de filas efectuadas con las operaciones INSERT, DELETE o UPDATE. Este método ExecuteNonQuery se usará solo para insertar, actualizar y eliminar, crear y establecer sentencias. (Lee mas)

ExecuteScalar devolverá el valor de columna individual de una sola fila, es decir, el valor único, en la ejecución de SQL Query o procedimiento almacenado utilizando el objeto de comando. Es muy rápido recuperar valores individuales de la base de datos. (Lee mas)

ExecuteReader se usará para devolver el conjunto de filas, en la ejecución de SQL Query o procedimiento almacenado utilizando el objeto de comando. Éste es solo la recuperación de registros hacia adelante y se usa para leer los valores de la tabla desde el principio hasta el final. (Lee mas)

ExecuteNonQuery: se usa normalmente cuando no se devuelve nada de las instrucciones Sql, como insertar, actualizar, eliminar operaciones.

 cmd.ExcecuteNonQuery(); 

ExecuteScalar:

Se usará cuando la consulta Sql devuelva un valor único.

 Int b = cmd.ExcecuteScalar(); 

ExecuteReader

Se usará cuando la consulta Sql o el Procedimiento almacenado devuelvan varias filas / columnas

 SqlDataReader dr = cmd.ExecuteReader(); 

para obtener más información, puede hacer clic aquí http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery