¿Cuáles son los diferentes casos cuando utilizamos estos tres? ¿Dónde debería usar uno y dónde no debería?¿Cuál es la diferencia entre ExecuteScalar, ExecuteReader y ExecuteNonQuery?
Respuesta
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 serSELECT @@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.).
'ExecuteNonQuery' puede devolver el número de filas afectadas. –
Pensé que ExecuteNonQuery se usa cuando necesitas llamar a procedimientos almacenados que devolverán una colección de tablas. – Gogutz
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
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'
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
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. –
De la documentación (nota: MSDN es un recurso útil cuando se desea saber qué cosas hacer!):
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.
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.
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.
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
ExecuteNonQuery():
- funcionará sólo con consultas de acción (Crear, modificar, soltar, insertar, actualizar, eliminar).
- Devuelve el recuento de filas efectuadas por la consulta.
- Tipo de devolución es int
- El valor de devolución es opcional y se puede asignar a una variable entera.
ExecuteReader():
- trabajará con la acción y no acción consultas (SELECT)
- Devuelve la colección de filas seleccionadas por la consulta.
- El tipo de devolución es DataReader.
- El valor devuelto es obligatorio y debe asignarse a otro objeto DataReader.
ExecuteScalar():
- trabajará con la no acción consultas que contienen funciones de agregado.
- Devuelve la primera fila y el valor de la primera columna del resultado de la consulta.
- El tipo de devolución es el objeto.
- 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
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)
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.
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)
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
- 1. ¿ExecuteScalar() tiene alguna ventaja sobre ExecuteReader()?
- 2. usando ExecuteReader en lugar de ExecuteNonQuery
- 3. ¿Cuál es la diferencia entre {0} y ""?
- 4. Cuál es la diferencia entre = y: =
- 5. ¿Cuál es la diferencia entre .ToString (+) y ""
- 6. Cuál es la diferencia entre $ (...) y `...`
- 7. ¿cuál es la diferencia entre:.! y: r !?
- 8. ¿Cuál es la diferencia entre ".equals" y "=="?
- 9. ¿Cuál es la diferencia entre dict() y {}?
- 10. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 11. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 12. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 13. ¿Cuál es la diferencia entre + = y = +?
- 14. ¿Cuál es la diferencia entre " " y ""?
- 15. Cuál es la diferencia entre $ y jQuery
- 16. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 17. Cuál es la diferencia entre la función() {}() y la función() {}()
- 18. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 19. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 20. ¿Cuál es la diferencia entre la vinculación estática y dinámica?
- 21. ¿Cuál es la diferencia entre la sección .got y .got.plt?
- 22. ¿Cuál es la diferencia entre el colado y la coerción?
- 23. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 24. ¿Cuál es la diferencia entre el casting y la conversión?
- 25. ¿Cuál es la diferencia entre WPF y la aplicación Silverlight?
- 26. ¿Cuál es la diferencia entre uno mismo y la ventana?
- 27. ¿Cuál es la diferencia entre CookieContainer y la colección Response.Cookies?
- 28. ¿Cuál es la diferencia entre la relación Composición y Asociación?
- 29. ¿cuál es la diferencia entre el material y la textura?
- 30. ¿Cuál es la diferencia entre el marco y la arquitectura?
I encontré este gran artículo sobre lo mismo: http: //www.webblogsf oryou.com/ado-net-main-difference-between-executereader-executenonquery-executescalar/ –