c# - net - ¿ExecuteScalar() tiene alguna ventaja sobre ExecuteReader()?
que es executenonquery en c# (6)
¿ ExecuteScalar()
tiene alguna ventaja sobre ExecuteReader()
?
Cuando tiene un solo valor devuelto desde su Consulta o SP, siempre es mejor usar ExecuteScalar () ya que recupera el primer valor del resultado. Por lo tanto, esto es más rápido en este tipo de situación.
Desde SqlCommand.ExecuteScalar Method
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.
También de lo que es la diferencia entre ExecuteReader, ExecuteNonQuery y ExecuteScalar
- ExecuteReader : se usa para acceder a los datos. Proporciona un conjunto de registros conectado de solo lectura, de solo lectura.
- ExecuteNonQuery : se utiliza para la manipulación de datos, como Insertar, Actualizar, Eliminar.
- ExecuteScalar : se utiliza para recuperar 1 fila 1 col. valor., es decir, valor único. Por ejemplo: para recuperar la función agregada. Es más rápido que otras formas de recuperar un solo valor de DB.
Desde la página ExecuteScalar en MSDN:
Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader
Por lo tanto, no es más rápido ni mejor, pero se usa para reducir la cantidad de código escrito cuando solo se necesita un valor.
Execute Scalar pretende obtener un valor único de la base de datos mientras Execute Reader para obtener múltiples registros en DataTable.
ExecuteScalar () tomará menos recursos en comparación con el ExecuteReader () ya que más tarde devolverá los datos de varias columnas de la base de datos.
ExecuteReader () creará una instancia del SqlDataReader que se basa en la secuencia y consultará los resultados del origen de datos
ExecuteScalar
solo devuelve el primer valor de la primera fila del conjunto de datos. Interna, se trata como ExecuteReader()
, se abre un DataReader
, se selecciona el valor y el DataReader
se destruye después. También siempre me pregunté sobre ese comportamiento, pero tiene una ventaja: tiene lugar dentro del Marco ... y no se puede competir con el Marco en términos de velocidad.
Editar por rwwilden: Echando un vistazo con Reflector dentro de SqlCommand.ExecuteScalar()
puede ver estas líneas:
SqlDataReader ds = this.RunExecuteReader(
CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar");
obj2 = this.CompleteExecuteScalar(ds, false);
Exactamente lo que sucede dentro de ExecuteReader
. Otra ventaja es que ExecuteScalar
devuelve null
cuando no se lee ningún dato. Si usa ExecuteReader
, tendrá que comprobarlo usted mismo.