2010-06-04 19 views

Respuesta

168
  • ExecuteScalar se usa típicamente cuando la consulta devuelve un solo valor. 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 varias filas/columnas (por ejemplo, SELECT col1, col2 from sometable).
  • ExecuteNonQuery se usa normalmente para declaraciones SQL sin resultados (por ejemplo, ACTUALIZAR, INSERTAR, etc.).
+33

'ExecuteNonQuery' puede devolver el número de filas afectadas. –

+0

Pensé que ExecuteNonQuery se usa cuando necesitas llamar a procedimientos almacenados que devolverán una colección de tablas. – Gogutz

+0

ExecuteNonQuery también funciona si tiene declaración de devolución en procedimiento almacenado. http://stackoverflow.com/questions/6210027/calling-stored-procedure-with-return-value – FrenkyB

34

Cada uno es una ejecución de tipo diferente.

  • ExecuteScalar va a ser el tipo de consulta que se devuelve un solo valor .

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

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

  • ExecuteReader le da una vuelta lector de datos que permitirá a leer todo de las columnas de los resultados de 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 es en realidad realizar algún tipo de trabajo como la inserción de 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'

+1

Parece que puede usar ExecuteReader para realizar los trabajos realizados por ExecuteScalar y ExecuteNonQuery, entonces, ¿por qué usar los otros dos? cualquier beneficio de rendimiento? – user20358

+0

Una razón para evitar el uso excesivo de ExecuteReader es que mantendrá ese lector hasta que haya terminado con él. Con todo esto, desea conocer información específica sobre cómo funcionan para utilizarlos de manera más efectiva. Lo que he esbozado aquí son algunas buenas pautas. –

9

De la documentación (nota: MSDN es un recurso útil cuando se desea saber qué cosas hacer!):

ExecuteScalar

Utilice el método ExecuteScalar para recuperar un solo 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 el CommandText a la Connection y crea un SqlDataReader.

... y desde SqlDataReader ...

Proporciona una manera de leer una corriente de sólo avance de las filas de una base de datos SQL Server. Esta clase no puede heredarse.

ExecuteNonQuery

Puede utilizar el ExecuteNonQuery para realizar operaciones de catálogo (por ejemplo, la consulta de la estructura de una base de datos o la creación de base de datos de objetos como tablas), o para cambiar los datos en una base de datos sin usar un DataSet mediante la ejecución de instrucciones UPDATE, INSERT o DELETE.

8

Para añadir a lo que publican otros:

ExecuteScalar vuelve conceptualmente 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 usa para consultas que devuelven un único valor. No estoy 100% seguro sobre SQLServer pero en Oracle, no lo usé lo uso para ejecutar una FUNCIÓN (un código de base de datos que devuelve un único valor) y espero que le proporcione el valor de retorno de la función aunque las funciones vuelvan valores .. Sin embargo, si está ejecutando la función como parte de una consulta, por ejemplo SELECT SUBSTR ('abc', 1, 1) FROM DUAL le daría el valor de retorno en virtud del hecho de que el valor devuelto se almacena en la celda superior izquierda 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 ...). Normalmente, 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 DB para garantizar este

38

ExecuteNonQuery():

  1. funcionará sólo con consultas de acción (Crear, modificar, soltar, insertar, actualizar, eliminar).
  2. Devuelve el recuento de filas efectuadas por la consulta.
  3. Tipo de devolución es int
  4. El valor de devolución es opcional y se puede asignar a una variable entera.

ExecuteReader():

  1. trabajará con la acción y no acción consultas (SELECT)
  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. trabajará con la no acción consultas que contienen funciones de agregado.
  2. Devuelve la primera fila y el valor de la primera columna del resultado de la consulta.
  3. El tipo de devolución es el objeto.
  4. El valor devuelto 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

4

ExecuteReader() ejecuta una consulta SQL que devuelve el objeto DbDataReader proveedor de datos que proporcionan adelante solamente y acceso de solo lectura para el resultado de la consulta.

ExecuteScalar() es similar al método ExecuteReader() que está diseñado para consultas simples como obtener un recuento de registros.

ExecuteNonQuery() ejecutar sin consulta que trabaja con crear, eliminar, actualizar, insertar)

3

ExecuteNonQuery

Este método ExecuteNonQuery será utilizada solamente para insertar, actualizar y borrar, crear, y instrucciones SET. El método ExecuteNonQuery devolverá el número de filas efectuadas con las operaciones INSERT, DELETE o UPDATE.

ExecuteScalar

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

Ejecutar lector se utilizará para devolver el conjunto de filas, en la ejecución de consultas SQL o un procedimiento almacenado utilizando 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.

3

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. (Read More)

ExecuteScalar 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. Es muy rápido recuperar valores individuales de la base de datos. (Read More)

ExecuteReader se utilizará 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.(Read More)

1

ExecuteNonQuery: se utiliza normalmente cuando no hay nada de regresar de las sentencias SQL como insertar, actualizar, eliminar operaciones.

cmd.ExcecuteNonQuery(); 

ExecuteScalar:

Será utilizado cuando SQL consulta devuelve un solo valor.

Int b = cmd.ExcecuteScalar(); 

ExecuteReader

Será utilizado cuando SQL consulta o procedimiento almacenado devuelve varios filas/columnas

SqlDataReader dr = cmd.ExecuteReader(); 

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

Cuestiones relacionadas