2011-12-27 32 views
7

Estoy creando algo así como una pequeña aplicación de caja que mantiene registros para clientes, empleados, servicios, ventas y citas. Estoy usando formularios de Windows y dentro de ese DataGrids. Creé la base de datos que voy a usar para la aplicación. Quiero saber si debería usar SqlCommand-SqlDataReader o SqlDataAdapter-DataSet en su lugar. ¿Qué enfoque es mejor?SqlCommand o SqlDataAdapter?

+0

posible duplicado de [SqlDataAdapter vs SqlDataReader] (http://stackoverflow.com/questions/1676753/sqldataadapter-vs-sqldatareader) –

+0

duplicado Posible de [SqlDataAdapter vs SqlDataReader] (http://stackoverflow.com/ preguntas/1676753/sqldataadapter-vs-sqldatareader) –

Respuesta

13

Esto depende en gran medida del tipo de operación que desee.

Lo que sigue es mi sugerencia.

  1. Si desea leer datos más rápida para ir SQLDataReader sino que viene como costo de operación que necesita tomar durante la lectura después de eso también. Conexión abierta Datos de lectura Cerrar conexión. Si olvidó cerrar, alcanzará el rendimiento.

  2. Ir a SQLDataAdapter

    • Si desea leer más rápido y utilizar en beneficio de Arco desconectado. de ADO.net
    • Esto cerrará/abrirá la conexión automáticamente.
    • También le permitirá manejar automáticamente la actualización en DataSet a DataBase. (SqlCommandBuilder)
  3. Uso SQLCommand (esto también viene cuando se lee SQLDataReader de datos de lectura) y para la inserción y actualización.

    • Esto le dará un mejor rendimiento para insertar y actualizar.

Si está utilizando marco .NET 3.5 SP1 o posterior que sugeriría LINQ to SQL o Entity Framework también podría resolver su propósito.

Gracias.

2

Si conoce estos componentes (Core ADO.NET) (Comando, Conexión, Adaptador de datos), le sugiero Entity Data Model o Linq-SQL.

SqlDataAdapter es clase auxiliar que implícitamente usa SqlCommand, SqlConnection y SqlDataReader.

4

SqlDataAdapter

  • almacena los datos en su base de datos de cliente y las actualizaciones necesarias. Por lo tanto, consume más memoria.
  • Por otro lado, no necesitaría ser conectado a su base de datos en el comando insert/delete/update/select.
  • Administra las conexiones internamente por lo que no tendría que preocuparse por eso.

Todo lo bueno de SqlDataAdapter tiene un costo de mayor consumo de memoria.Por lo general, se usa para sistemas que necesitan varios usuarios conectados a la base de datos.
Así que yo diría que si esa no es tu situación, ve por SqlCommand y el modelo conectado.

2

Si solo está leyendo datos y no está haciendo actualizaciones/inserciones/eliminaciones, entonces SqlDataReader será más rápido. También puede combinarlo con un DataSet. Si ajusta los objetos de acceso a datos con las declaraciones using, el tiempo de ejecución manejará la lógica de limpieza de la conexión por usted.

Un patrón que a menudo utilizan para el acceso síncrono es algo como esto:

DataTable result = new DataTable(); 
using (SqlConnection conn = new SqlConnection(MyConnectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand(MyQueryText, conn)) 
    { 
     // set CommandType, parameters and SqlDependency here if needed 
     conn.Open(); 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      result.Load(reader); 
     } 
    } 
} 

Para actualizaciones/eliminaciones/inserciones, un SqlDataAdapter valdría la pena considerar, pero por lo general sólo si ya tiene sus datos en un DataSet . De lo contrario, hay formas más rápidas/mejores de hacer las cosas.

+0

¿Puede el adaptador de datos ser una buena opción para insertar millones de registros (2 a 3 millones de registros que tengo en mi conjunto de datos)? –

1

DataReader - El datareader es un avance, sólo la corriente de sólo lectura de los datos de la base de datos. Esto hace que el lector de datos sea un medio muy eficiente para recuperar datos, ya que solo un registro se lleva a la memoria en un tiempo . La desventaja: un objeto de conexión solo puede contener un lector de datos a la vez, por lo que debemos cerrar explícitamente el lector de datos cuando hemos terminado con el . Esto liberará la conexión para otros usos. Los objetos de adaptador de datos gestionarán abrir y cerrar una conexión para el comando a ejecutar

DataAdapter - Representa un conjunto de comandos SQL y una conexión de base que se utilizan para rellenar el conjunto de datos y actualizar los datos fuente. Sirve como un puente entre un DataSet y una fuente de datos para recuperar y guardar datos. El adaptador de datos ofrece este puente por Relleno de mapeo, que cambia los datos en el conjunto de datos para que coincida con los datos en el origen de datos y actualización, que cambia los datos en los datos fuente para que coincida con los datos en el conjunto de datos. Mediante su uso, adaptador de datos también abre y cierra automáticamente la conexión como y cuando sea necesario.

Cuestiones relacionadas