Arquitectura ADO.NET con Microsoft. Data.SqlClient

ADO.NET es el modelo de acceso a datos integrado en .NET. Microsoft. Data.SqlClient implementa ese modelo para bases de datos compatibles con SQL Server y añade capacidades específicas de SQL Server.

La página de inicio de Microsoft. Data.SqlClient proporciona el mapa de características del controlador y la línea base de producción. Este artículo explica cómo encaja el controlador en ADO.NET.

Abstracciones ADO.NET y tipos SqlClient

ADO.NET define abstracciones independientes del proveedor en el System.Data.Common espacio de nombres. Microsoft. Data.SqlClient proporciona implementaciones concretas.

Abstracción de ADO.NET Tipo SqlClient Purpose
DbConnection SqlConnection Abre una conexión lógica a una base de datos.
DbCommand SqlCommand Ejecuta texto SQL o un procedimiento almacenado.
DbParameter SqlParameter Envía un valor escrito por separado del texto del comando.
DbDataReader SqlDataReader Transmite las filas de resultados desde el servidor.
DbTransaction SqlTransaction Agrupa los comandos en una sola transacción atómica.
DbDataAdapter SqlDataAdapter Rellena y actualiza objetos DataSet y DataTable desconectados.
DbBatch SqlBatch Envía varios comandos en un solo lote en los marcos de destino compatibles.

Programar contra las abstracciones ADO.NET cuando una biblioteca debe soportar múltiples proveedores de bases de datos. Utiliza los tipos SqlClient cuando una aplicación se dirige a SQL Server y necesita funciones específicas de cada proveedor.

Acceso a datos conectados

El acceso conectado mantiene una conexión disponible mientras se ejecuta un comando y mientras la aplicación lee sus resultados.

Una petición común sigue a esta secuencia:

  1. Crea un SqlConnection a partir de una cadena de conexión.
  2. Abrir la conexión.
  3. Crea una SqlCommand y añade los valores de SqlParameter.
  4. Ejecute el comando.
  5. Procesar un valor escalar, el número de filas afectadas o SqlDataReader.
  6. Deshazte del lector, el comando y la conexión.

Utiliza el acceso conectado para la mayoría de APIs web, servicios, trabajadores y aplicaciones de línea de comandos. SqlDataReader procesa filas en flujo y suele usar menos memoria que cargar el resultado completo en un DataSet.

Abrir y liberar un SqlConnection para cada unidad de trabajo es el patrón habitual. La agrupación de conexiones reutiliza la conexión física subyacente. No mantengas una sola conexión global abierta durante toda la vida útil de una aplicación.

Acceso de datos desconectado

SqlDataAdaptertransfiere datos entre SQL Server y un archivo en memoria DataSet o DataTable. La aplicación puede cerrar la conexión mientras lee o modifica los datos en memoria y luego volver a conectarse para enviar actualizaciones.

Utiliza acceso desconectado cuando necesites:

  • Vinculación de datos a DataSet o DataTable.
  • Relaciones y restricciones en memoria.
  • Ediciones offline que luego se reconcilian.
  • Compatibilidad con una aplicación existente construida alrededor de DataAdapters.

Para nuevos servicios orientados a peticiones, empieza con SqlCommand y SqlDataReader a menos que necesites el modelo de objetos desconectados.

Características específicas de SQL Server

Microsoft. Data.SqlClient añade APIs y comportamientos de conexión que no forman parte del contrato ADO.NET independiente del proveedor:

  • Devolución de autenticación y token de acceso de Microsoft Entra.
  • TDS 8.0 con cifrado estricto y opciones de certificado de SQL Server.
  • Enclaves siempre cifrados y seguros.
  • SqlBulkCopy para la carga de datos de alta velocidad.
  • Parámetros con valores de tabla.
  • Tipos de datos de SQL Server, incluyendo JSON y tipos vectoriales.
  • Lógica de reintento configurable.
  • Diagnósticos, estadísticas y contadores de SQL Server.
  • Grupo de disponibilidad y opciones de conexión por failover.

Usar estas funciones vincula ese código a Microsoft. Data.SqlClient. Mantén el código específico del proveedor detrás de un límite de acceso a los datos si el resto de la aplicación debe permanecer independiente del proveedor.

Vida útil del objeto y concurrencia

Elimina conexiones, comandos, lectores, transacciones y objetos de copia masiva rápidamente. Úsalo await using con código asincrónico cuando un tipo implementa IAsyncDisposable.

SqlConnection, SqlCommand, SqlDataReader, y SqlTransaction no soportan el uso simultáneo desde múltiples hilos. Asigna a cada operación concurrente su propia conexión y confía en la agrupación de conexiones. Múltiples Conjuntos de Resultados Activos (MARS) permite más de un conjunto activo de resultados en una conexión, pero no hace que los objetos SqlClient sean seguros para hilos.

Paquetes y espacios de nombres

Instala el paquete Microsoft.Data.SqlClient NuGet e importa el espacio de nombres Microsoft.Data.SqlClient. El controlador se distribuye de forma independiente de .NET, por lo que sus calendarios de funcionalidades, lanzamiento y soporte difieren del tiempo de ejecución de .NET.

System.Data.SqlClient es el proveedor más antiguo. Usa Microsoft. Data.SqlClient para nuevos desarrollos. Para una aplicación existente, sigue Migrar de System.Data.SqlClient a Microsoft. Data.SqlClient.