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?
Respuesta
Esto depende en gran medida del tipo de operación que desee.
Lo que sigue es mi sugerencia.
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.
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)
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.
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
.
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.
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.
¿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)? –
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.
- 1. Confundido entre SqlCommand y SqlDataAdapter
- 2. ¿Debería reutilizar los objetos SqlConnection, SqlDataAdapter y SqlCommand?
- 3. SqlCommand (using/Eliminación tema)
- 4. ¿SqlDataAdapter cierra la función SqlConnection después de Fill()?
- 5. SqlDataAdapter salida Cuestión variable C#
- 6. Reutilizando SqlCommand?
- 7. Parámetros SqlCommand tamaño confusión
- 8. Usando SqlDataAdapter para insertar una fila
- 9. SQLCommand/SQLConnection vs OleDbCommand/OleDbConnection
- 10. Cierre SqlConnection y SqlCommand C#
- 11. Stored Proc y SqlCommand Timeout
- 12. ¿Cómo desinfecta SqlCommand los parámetros?
- 13. Parámetro In-Out para SqlCommand
- 14. ¿Está bien pasar SQLCommand como parámetro?
- 15. SqlCommand() ExecuteNonQuery() trunca el texto del comando
- 16. Ejecutando un SQLCommand sin especificar una transacción
- 17. ¿Cuándo se deben usar "SqlDbType" y "size" al agregar los parámetros de SqlCommand?
- 18. Pros y contras de usar SqlCommand Prepare in C#?
- 19. ¿Cómo reutilizar el parámetro SqlCommand en cada iteración?
- 20. Excepción de parámetros máximos de SqlCommand en 2099 parámetros
- 21. ¿Es posible aplicar el comportamiento de solo lectura con SqlCommand?
- 22. ¿Qué excepciones se detectan al tratar con SqlConnection, SqlDataReader, SqlCommand?
- 23. ¿Qué tipo de datos devuelve el método SQLCommand ExecuteScalar()?
- 24. ¿Hay alguna diferencia entre SqlConnection.CreateCommand y el nuevo SqlCommand?
- 25. objeto SqlCommand, ¿qué período de tiempo para CommandTimeout?
- 26. El procedimiento o función espera el parámetro que no se suministró
- 27. ¿Cómo seleccionar datos en la lista <T> en lugar de DataTable?
- 28. Establecer un valor de base de datos para anular con un SqlCommand + parámetros
- 29. ¿Es posible obtener el texto analizado de un SqlCommand con SqlParameters?
- 30. ¿Capa de acceso a datos estática o basada en instancia?
posible duplicado de [SqlDataAdapter vs SqlDataReader] (http://stackoverflow.com/questions/1676753/sqldataadapter-vs-sqldatareader) –
duplicado Posible de [SqlDataAdapter vs SqlDataReader] (http://stackoverflow.com/ preguntas/1676753/sqldataadapter-vs-sqldatareader) –