Opciones de conexión para Microsoft. Data.SqlClient

Este artículo enumera todas las palabras clave de cadena de conexión que Microsoft. Data.SqlClient acepta. Cada palabra clave también tiene una propiedad de coincidencia SqlConnectionStringBuilder . Para una introducción, patrones comunes y reglas de análisis sintáctico, véase Cadenas de conexión.

Las palabras clave y alias no son sensibles a mayúsculas y minúsculas. Cuando fijas un valor a través de una propiedad constructora, este escribe la palabra clave canónica en la columna Palabra Clave .

Establecer opciones con SqlConnectionStringBuilder

Empieza desde una cadena de conexión base que contiene los ajustes del servidor, la base de datos y la autenticación. Luego establece opciones específicas de carga de trabajo a través de propiedades del constructor. Las pestañas del Marco .NET usan C# 7.3. Para crear un proyecto que ejecute las muestras, consulta Crear el proyecto.

using Microsoft.Data.SqlClient;

string connectionString =
    Environment.GetEnvironmentVariable("SQL_CONNECTION_STRING")
    ?? throw new InvalidOperationException(
        "Set the SQL_CONNECTION_STRING environment variable.");

var builder = new SqlConnectionStringBuilder(connectionString)
{
    ApplicationName = "Orders.Worker",
    ConnectTimeout = 30,
    CommandTimeout = 60,
    MaxPoolSize = 50,
};

await using var connection = new SqlConnection(builder.ConnectionString);
await connection.OpenAsync();

await using var command = new SqlCommand("SELECT APP_NAME();", connection);
Console.WriteLine($"APP_NAME(): {await command.ExecuteScalarAsync()}");
Console.WriteLine($"Connection timeout: {connection.ConnectionTimeout}");
Console.WriteLine($"Command timeout: {command.CommandTimeout}");

La salida es la siguiente:

APP_NAME(): Orders.Worker
Connection timeout: 30
Command timeout: 60

Un nuevo SqlCommand toma su tiempo de espera por defecto de la Command Timeout palabra clave de su conexión.

Comprobar valores por defecto

Un nuevo SqlConnectionStringBuilder informa la opción predeterminada para cada opción. Este programa imprime los valores predeterminados que la mayoría de las aplicaciones revisan:

using Microsoft.Data.SqlClient;

var defaults = new SqlConnectionStringBuilder();

Console.WriteLine($"Connect Timeout: {defaults.ConnectTimeout}");
Console.WriteLine($"Command Timeout: {defaults.CommandTimeout}");
Console.WriteLine($"Connect Retry Count: {defaults.ConnectRetryCount}");
Console.WriteLine($"Connect Retry Interval: {defaults.ConnectRetryInterval}");
Console.WriteLine($"Encrypt: {defaults.Encrypt}");
Console.WriteLine($"Trust Server Certificate: {defaults.TrustServerCertificate}");
Console.WriteLine($"Pooling: {defaults.Pooling}");
Console.WriteLine($"Min Pool Size: {defaults.MinPoolSize}");
Console.WriteLine($"Max Pool Size: {defaults.MaxPoolSize}");
Console.WriteLine($"Connection Idle Timeout: {defaults.IdleTimeout}");
Console.WriteLine($"Load Balance Timeout: {defaults.LoadBalanceTimeout}");
Console.WriteLine($"Packet Size: {defaults.PacketSize}");
Console.WriteLine($"Multi Subnet Failover: {defaults.MultiSubnetFailover}");
Console.WriteLine($"IP Address Preference: {defaults.IPAddressPreference}");
Console.WriteLine($"Pool Blocking Period: {defaults.PoolBlockingPeriod}");
Console.WriteLine($"Application Intent: {defaults.ApplicationIntent}");
Console.WriteLine($"Application Name: {defaults.ApplicationName}");
Console.WriteLine($"Type System Version: {defaults.TypeSystemVersion}");
Console.WriteLine($"Transaction Binding: {defaults.TransactionBinding}");

En .NET, la salida es:

Connect Timeout: 15
Command Timeout: 30
Connect Retry Count: 1
Connect Retry Interval: 10
Encrypt: True
Trust Server Certificate: False
Pooling: True
Min Pool Size: 0
Max Pool Size: 100
Connection Idle Timeout: 300
Load Balance Timeout: 0
Packet Size: 8000
Multi Subnet Failover: False
IP Address Preference: IPv4First
Pool Blocking Period: Auto
Application Intent: ReadWrite
Application Name: Core Microsoft SqlClient Data Provider
Type System Version: Latest
Transaction Binding: Implicit Unbind

Encrypt: True es la Mandatory opción. En .NET Framework, el nombre de la aplicación por defecto es Framework Microsoft SqlClient Proveedor de datos.

Opciones de servidor y base de datos

Keyword Aliases Propiedad del constructor Predeterminado Description
Data Source Server, Address, , Addr, Network Address DataSource Vacía El servidor al que conectar. Acepta un nombre de host, host,port, host\instance, (localdb)\instance, y un tcp: prefijo de protocolo or np: . Para los formularios aceptados, consulte Especificar el servidor y la base de datos.
Initial Catalog Database InitialCatalog Vacía La base de datos para usar después de iniciar sesión. Cuando está vacía, el servidor utiliza la base de datos predeterminada del usuario de inicio.
AttachDbFilename Extended Properties, Initial File Name AttachDBFilename Vacía La ruta completa de un archivo de base de datos principal para adjuntar, para SQL Server Express y LocalDB.
User Instance Ninguno UserInstance false Redirige la conexión a una instancia de usuario de SQL Server Express. Para más información, consulte instancias de usuario de SQL Server Express.
Failover Partner FailoverPartner FailoverPartner Vacía El socio de espejo de base de datos para probar cuando el servidor principal no está disponible. El reflejo de bases de datos está obsoleto. Usa grupos de disponibilidad para nuevos despliegues.
Current Language Language CurrentLanguage Vacía El nombre del lenguaje SQL Server para la sesión, como us_english. Controla los formatos de fecha y el lenguaje de los mensajes del sistema.

Opciones de identidad de aplicación

Keyword Aliases Propiedad del constructor Predeterminado Description
Application Name App ApplicationName Core Microsoft SqlClient Data Provider El nombre que el servidor reporta a través APP_NAME() y en las vistas de sesión. Utiliza un nombre estable para cada carga de trabajo desplegada. Valores distintos crean conjuntos de conexiones distintos.
Workstation ID WorkstationID, WSID WorkstationID Nombre del equipo local El nombre del ordenador cliente que el servidor reporta a través de HOST_NAME().
Application Intent ApplicationIntent ApplicationIntent ReadWrite ReadOnly solicita enrutamiento de intención de lectura cuando el destino lo permite. No convierte las declaraciones en solo lectura. Para más información, consulta Alta disponibilidad y recuperación ante desastres.

Para informar qué framework o herramienta abrió una conexión, utiliza la RegisteredApplication propiedad. No tiene palabra clave de cadena de conexión. Para más información, consulte Reportar la identidad de la aplicación.

Opciones de autenticación

Keyword Aliases Propiedad del constructor Predeterminado Description
Authentication Ninguno Authentication No especificado Método de autenticación. Para los valores aceptados, véase la siguiente tabla.
Integrated Security Trusted_Connection IntegratedSecurity false true, yes, o sspi utiliza la identidad del proceso actual.
User ID UID, User UserID Vacía El nombre de usuario de SQL, o el identificador de usuario o cliente del Microsoft Entra ID, dependiendo de Authentication.
Password PWD Password Vacía La contraseña o el secreto del cliente para los métodos que lo aceptan.
Persist Security Info PersistSecurityInfo PersistSecurityInfo false Cuando false, el controlador elimina la contraseña desde SqlConnection.ConnectionString después de que se abra la conexión. Déjalo false.
Server SPN ServerSPN ServerSPN Derivado del nombre del servidor Anula el Nombre Principal del Servicio (SPN) utilizado para la autenticación integrada al servidor principal.
Failover Partner SPN FailoverPartnerSPN FailoverPartnerSPN Derivado del nombre de socio Anula el SPN utilizado para la autenticación integrada al socio de conmutación por error.

Authentication acepta estos valores. El constructor las escribe sin espacios, como ActiveDirectoryDefault, y el analizador acepta ambas formas.

Value Identity
Sql Password Un inicio de sesión SQL con User ID y Password.
Active Directory Default Una cadena de fuentes de credenciales, como variables de entorno, identidad gestionada y acceso a herramientas de desarrolladores.
Active Directory Managed Identity Una identidad controlada. Configurado User ID al ID del cliente de una identidad asignada por el usuario. Active Directory MSI es un alias.
Active Directory Workload Identity Una identidad de carga de trabajo Kubernetes.
Active Directory Service Principal Una aplicación con User ID se establece al ID del cliente y Password se establece al secreto del cliente.
Active Directory Interactive Un usuario que inicia sesión mediante un prompt del navegador.
Active Directory Device Code Flow Un usuario que inicia sesión en otro dispositivo con un código.
Active Directory Integrated El usuario de Windows iniciado sesión, mediante una configuración federada o de inicio de sesión único sin interrupciones.
Active Directory Password Un nombre de usuario y una contraseña. Este método está obsoleto. Usa otro método.

Los métodos Microsoft Entra ID necesitan el Microsoft.Data.SqlClient.Extensions.Azure paquete. Para configuración y ejemplos, véase la autenticación Microsoft Entra ID y la autenticación de SQL Server.

Opciones de cifrado

Keyword Aliases Propiedad del constructor Predeterminado Description
Encrypt Ninguno Encrypt Mandatory Strict utiliza TDS 8.0 y siempre valida el certificado del servidor. Mandatory, true, o yes cifra la conexión. Optional, false, o no cifra toda la conexión solo cuando el servidor lo requiere. Cuando el servidor soporta cifrado pero no lo requiere, solo se cifra el paquete de inicio de sesión.
Trust Server Certificate TrustServerCertificate TrustServerCertificate false true Salta la validación del certificado del servidor. Se omite cuando Encrypt=Strict. No lo use en producción.
Host Name In Certificate HostNameInCertificate HostNameInCertificate Vacía Un nombre de respaldo para la validación de certificados. SqlClient primero valida el certificado contra el nombre del servidor en Data Source. Solo comprueba Host Name In Certificate cuando ese nombre no coincide, así que un valor incorrecto no causa un fallo cuando el nombre del servidor ya coincide. No fija un certificado. Para requerir un certificado específico, utiliza Server Certificate. No cambia el destino de la red ni evita la cadena de confianza ni las comprobaciones de caducidad. Déjalo sin configurar cuando el nombre del servidor ya coincide con el certificado.
Server Certificate ServerCertificate ServerCertificate Vacía La ruta de un archivo PEM, DER o CER que debe coincidir exactamente con el certificado del servidor. El conductor comprueba la coincidencia solo cuando valida el certificado, así que úsalo con Encrypt=Mandatory o Encrypt=Strict y Trust Server Certificate=false. Un archivo coincidente reemplaza la validación de la cadena y del nombre de host, así que funciona con un certificado autofirmado en el que el cliente no confía.

Para las reglas completas de validación, véase Cifrado y validación de certificados.

Opciones siempre cifradas

Keyword Aliases Propiedad del constructor Predeterminado Description
Column Encryption Setting ColumnEncryption ColumnEncryptionSetting Disabled Enabled activa Siempre Cifrado para la conexión.
Attestation Protocol Ninguno AttestationProtocol No especificado El protocolo de atestación del enclave: AAS, HGS, o None.
Enclave Attestation Url Ninguno EnclaveAttestationUrl Vacía El endpoint del servicio de atestación para Always Encrypted con enclaves seguros.

Opciones de red

Keyword Aliases Propiedad del constructor Predeterminado Description
Multi Subnet Failover MultiSubnetFailover MultiSubnetFailover false Prueba todas las direcciones IP a las que se resuelve el nombre del servidor en paralelo. Úsalo para escuchadores de grupos de disponibilidad y instancias de clúster de conmutación por conmutación a través de TCP. No soportado con espejamiento de base de datos. Las instancias nombradas dependen de la implementación de la red. La implementación gestionada, que .NET utiliza en Linux y macOS y en Windows cuando la red gestionada está activada, soporta una instancia nombrada y envía la solicitud del navegador SQL Server a todas las direcciones resueltas en paralelo. La implementación nativa en Windows puede rechazar una instancia nombrada con el error SNI 48.
IP Address Preference IPAddressPreference IPAddressPreference IPv4First El orden para intentar resolver responde: IPv4First, IPv6First, o UsePlatformDefault.
Packet Size PacketSize PacketSize 8000 El tamaño del paquete del Flujo de Datos Tabulares (TDS) en bytes, desde 512 hasta 32.768.

Un interruptor AppContext a nivel de proceso puede cambiar el Multi Subnet Failover valor predeterminado a true. Para más información, consulta los interruptores AppContext en SqlClient.

Opciones de tiempo de espera

Keyword Aliases Propiedad del constructor Predeterminado Description
Connect Timeout Connection Timeout, ConnectTimeout, Timeout ConnectTimeout 15 Segundos para esperar una conexión, incluyendo la espera para una conexión agrupada cuando la piscina está llena. 0 espera indefinidamente.
Command Timeout Ninguno CommandTimeout 30 El valor predeterminado CommandTimeout en segundos para los comandos creados en la conexión. 0 espera indefinidamente.

Connect Timeout no limita la ejecución de consultas. Command Timeout No limita el inicio de sesión ni la espera para una conexión agrupada. Pasa a CancellationToken llamadas asíncronas para que el llamante pueda dejar de esperar antes de que expire cualquiera de los tiempos muertos.

Opciones de recuperación de conexión

Keyword Aliases Propiedad del constructor Predeterminado Description
Connect Retry Count ConnectRetryCount ConnectRetryCount 1 Vuelve a intentar tras un fallo transitorio cualificado durante la primera apertura y al restaurar una conexión de ralentí rota. 0 Apaga los reintentos. Los valores válidos son de 0 a 255.
Connect Retry Interval ConnectRetryInterval ConnectRetryInterval 10 Segundos entre intentos de nuevo. Los valores válidos son del 1 al 60.

Cuando Connect Retry Count es 1, que es el valor predeterminado, el controlador lo utiliza 2 para endpoints de Azure SQL y 5 para endpoints de pools SQL serverless de Azure Synapse Analytics cuando restaura una conexión inactiva rota. La primera apertura usa el valor como establecido, por lo que el valor por defecto permite un reintento en cada extremo. El controlador utiliza cualquier otro valor establecido en ambos casos.

Estas palabras clave no intentan repetir un comando que falla mientras está en ejecución. Para saltarse el reintento incorporado para una apertura, llama a una Open sobrecarga con OpenWithoutRetry. Para políticas personalizadas, véase Lógica de reintento configurable. Vuelve a intentar un comando solo cuando sea seguro repetirlo.

Opciones de agrupación

Keyword Aliases Propiedad del constructor Predeterminado Description
Pooling Ninguno Pooling true Reutiliza conexiones físicas para emparejar cadenas de conexión.
Min Pool Size Ninguno MinPoolSize 0 Conexiones físicas que la piscina mantiene abiertas después de crearse.
Max Pool Size Ninguno MaxPoolSize 100 Las conexiones físicas más fuertes en una sola piscina. Debe ser 1 como mínimo.
Connection Idle Timeout Ninguno IdleTimeout 300 Segundos en los que una conexión puede permanecer inactiva en la piscina antes de que la piscina la cierre. 0 Apaga la expiración en ralentí. Se aplica solo cuando el Switch.Microsoft.Data.SqlClient.UseLegacyIdleTimeoutBehavior cambio AppContext es false. De forma predeterminada, es true.
Load Balance Timeout Connection Lifetime LoadBalanceTimeout 0 La edad máxima en segundos de una conexión volvía a la piscina. Una conexión antigua está cerrada. 0 Apaga el límite.
Pool Blocking Period PoolBlockingPeriod PoolBlockingPeriod Auto Ya sea que el pool regenere un fallo de inicio de sesión en caché durante un corto periodo: Auto, AlwaysBlock, o NeverBlock. Autodesactiva el bloqueo para los endpoints de Azure SQL.

Cada cadena de conexión distinta tiene su propio pool. Para claves de pool, limpieza y tiempo de inactividad, consulta pooling de conexiones de SQL Server.

Opciones de transacción y sesión

Keyword Aliases Propiedad del constructor Predeterminado Description
Enlist Ninguno Enlist true Activa la conexión en la transacción ambiental System.Transactions cuando se abre.
Transaction Binding Ninguno TransactionBinding Implicit Unbind Implicit Unbind Desconecta la conexión cuando termina la transacción de soldados rasos. Explicit Unbind Lo mantiene conectado hasta que se cierra la conexión o el código lo desconecte.
Multiple Active Result Sets MultipleActiveResultSets MultipleActiveResultSets false Permite más de un lote activo en una sola conexión.
Type System Version Ninguno TypeSystemVersion Latest El tipo de servidor que expone el controlador. Acepta Latest, SQL Server 2012, SQL Server 2008, y SQL Server 2005. Déjalo en Latest.
Replication Ninguno Replication false Identifica la conexión como una conexión de replicación.

Opciones solo del framework .NET

Estas palabras clave solo se aceptan en .NET Framework. En .NET, el constructor lanza NotSupportedException y SqlConnection lanza ArgumentException.

Keyword Aliases Propiedad del constructor Predeterminado Description
Network Library Net, Network NetworkLibrary Vacía La biblioteca de la red. No lo combines con el prefijo o tcp:np: en Data Source, porque la conexión falla. En .NET, prefijo Data Source con tcp: o np: en su lugar.
Connection Reset Ninguno ConnectionReset true Obsolete.
Transparent Network IP Resolution TransparentNetworkIPResolution TransparentNetworkIPResolution true Obsolete.

Palabras clave no soportadas

Keyword Result
Context Connection Context Connection=true produce InvalidOperationException. Microsoft. Data.SqlClient no soporta conexiones contextuales SQL CLR.
Asynchronous Processing Lanza ArgumentException: Keyword not supported. Los métodos asíncronos funcionan sin ella.
Driver, Provider Lanza ArgumentException: Keyword not supported. Estas palabras clave pertenecen a ODBC y OLE DB.

Reglas de validación

SqlConnectionStringBuilder Rechaza palabras clave desconocidas y muchos valores inválidos cuando los configuras. SqlConnectionrealiza más comprobaciones cuando configuras su cadena de conexión, incluyendo valores individuales que acepta el constructor y combinaciones de palabras clave. Una cadena que el constructor acepta aún puede fallar cuando creas la conexión.

El constructor y la conexión rechazan estos valores con ArgumentException:

  • Connect Timeout, Command Timeout, Load Balance Timeout, Connection Idle Timeout, o Min Pool Size menos que 0.
  • Max Pool Size menos de 1.
  • Packet Size fuera de 512 a 32.768.
  • Connect Retry Count Fuera de 0 a 255.
  • Connect Retry Interval Fuera del 1 al 60.
  • Una palabra clave que no aparece en este artículo.

SqlConnection también rechaza estos valores con ArgumentException, aunque el constructor los acepte:

  • Type System Version aparte de Latest, SQL Server 2012, SQL Server 2008, o SQL Server 2005.
  • Transaction Binding aparte de Implicit Unbind o Explicit Unbind.
  • Un valor mayor que el límite TDS para Application Name, Current Language, Data Source, Failover Partner, Initial Catalog, PasswordUser ID, , Workstation ID, o AttachDBFilename.

SqlConnection también rechaza estas combinaciones con ArgumentException:

  • Min Pool Size mayor que Max Pool Size.
  • Failover Partner sin Initial Catalog.
  • Failover Partner con Multi Subnet Failover=true, User Instance=trueo Application Intent=ReadOnly.
  • Authentication con Integrated Security=true.
  • Password con Active Directory Integrated, Active Directory Interactive, Active Directory Managed Identity, Active Directory MSI, Active Directory Default, , o Active Directory Workload Identity.
  • User ID o Password con Active Directory Device Code Flow.

Cambios en la opción de revisión

Antes de cambiar una opción en producción:

  1. Registra la cadena de conexión actual, la versión del driver, el tipo de endpoint y el problema que estás resolviendo.
  2. Cambia una opción a la vez.
  3. Prueba del establecimiento de conexiones, la autenticación, la validación de certificados, la agrupación de conexiones, la conmutación por error, la cancelación y la ejecución de consultas.
  4. Mide la latencia de conexión, las esperas en el pool y los números de error.
  5. Confirma la configuración en cada instancia desplegada.

Un cambio en la cadena de conexión crea un nuevo pool. Durante un despliegue por etapas, los pools antiguos y nuevos existen al mismo tiempo, por lo que el número total de conexiones físicas al servidor puede aumentar.