2010-03-08 18 views

Respuesta

26

ExecuteScalar solo devuelve el primer valor de la primera fila del conjunto de datos. Interna se trata como ExecuteReader(), se abre DataReader, se selecciona el valor y se destruye DataReader después. También siempre me pregunté sobre ese comportamiento, pero tiene una ventaja: se lleva a cabo dentro del Marco ... y no se puede competir con el Marco de manera rápida.

Editar Por rwwilden: Echando un vistazo en el interior del reflector con SqlCommand.ExecuteScalar() se puede ver estas líneas:

SqlDataReader ds = this.RunExecuteReader(
    CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar"); 
obj2 = this.CompleteExecuteScalar(ds, false); 

exactamente lo que sucede en el interior ExecuteReader. Otra ventaja es que ExecuteScalar devuelve null cuando no se leen datos. Si usa ExecuteReader, tendrá que verificar esto usted mismo.

+0

+1 para usar Reflector. – Steven

13

De SqlCommand.ExecuteScalar Method

Utilice el método ExecuteScalar a recuperar un solo valor (por ejemplo, un valor total) a partir de una base de datos. Esto requiere menos código que utiliza el método ExecuteReader, y luego realizar las operaciones que necesidad de generar el valor único utilizando los datos devueltos por un SqlDataReader .

También desde What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar

  • ExecuteReader: se utiliza para acceder a los datos . Proporciona un conjunto de registros conectado de solo lectura, de solo lectura.
  • ExecuteNonQuery: Usar para la manipulación de los datos , como Insertar, Actualizar, Borrar.
  • ExecuteScalar: Se utiliza para recuperar 1 fila 1 col. valor., es decir, valor único. por ejemplo: para recuperar la función de agregado. Es más rápido que otras formas de recuperar un único valor de DB.
2

Cuando tiene un único valor devuelto de su consulta o SP, siempre es mejor utilizar ExecuteScalar() ya que recupera el primer valor del resultado. Por lo tanto, esto es más rápido en este tipo de situación.

2

Ejecutar Scalar destinado a obtener un único valor de la base de datos mientras Execute Reader para obtener múltiples registros en DataTable.

4

De ExecuteScalar página 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 mejor o más rápido, pero se utiliza para reducir la cantidad de código escrito cuando sólo se necesita un valor.

0

ExecuteScalar() tomará menos recursos en comparación con el ExecuteReader() como más tarde devolverá los datos de múltiples columnas de la base de datos.

ExecuteReader() será instanciar el SqlDataReader que se basa corriente y consultar los resultados de la fuente de datos

Cuestiones relacionadas