Compartilhar via


Opções de AppContext no SqlClient

Aplica-se a: .NET Framework .NET .NET Standard

Baixar ADO.NET

A classe AppContext permite que o SqlClient forneça novas funcionalidades enquanto continua dando suporte a chamadores que dependem do comportamento anterior. Os usuários podem recusar alterações no comportamento definindo opções de AppContext específicas.

Habilitar o comportamento de truncamento de decimal

Aplica-se a: .NET Framework; .NET; .NET Standard

Começando com o Microsoft.Data.SqlClient 2.0, os dados decimais são arredondados por padrão, como é feito pelo SQL Server. Para habilitar o comportamento de truncamento anterior, você pode definir a opção de AppContext "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" como true na inicialização do aplicativo:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);

Habilitando a rede gerenciada no Windows

Aplica-se a: .NET; .NET Standard

(Disponível começando com a versão 2.0)

No Windows, o SqlClient usa uma implementação nativa da interface de rede SNI por padrão. Para habilitar o uso de uma implementação de SNI gerenciada, você pode definir a opção de AppContext "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" como true na inicialização do aplicativo:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);

Essa opção altera o comportamento do driver para usar a implementação de rede gerenciada em projetos do .NET Core 2.1+ e do .NET Standard 2.0+ no Windows, eliminando todas as dependências de bibliotecas nativas para a biblioteca Microsoft.Data.SqlClient. Sua finalidade é apenas de teste e depuração.

Observação

Há algumas diferenças conhecidas em comparação com a implementação nativa. Por exemplo, a implementação gerenciada não dá suporte à Autenticação do Windows fora do domínio.

Desabilitando a Resolução IP de Rede Transparente

Aplica-se a: .NET Framework

A TNIR (Resolução IP de Rede Transparente) é uma revisão do recurso MultiSubnetFailover existente. A TNIR afeta a sequência de conexão do driver quando o primeiro IP resolvido do nome do host não responde e quando existem vários IPs associados ao nome do host. Ela interage com MultiSubnetFailover para fornecer as três seguintes sequências de conexão:

  • 0: um IP é tentado, seguido por todos os IPs em paralelo
  • 1: todos os IPs são tentados em paralelo
  • 2: todos os IPs são tentados um após o outro
TransparentNetworkIPResolution MultiSubnetFailover Comportamento
True True 1
True Falso 0
Falso True 1
Falso Falso 2

TransparentNetworkIPResolution é habilitado por padrão. MultiSubnetFailover é desabilitado por padrão. Para desabilitar a TNIR, você pode definir a opção de AppContext "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" como true na inicialização do aplicativo:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString", true);

Para obter mais informações sobre como definir essas propriedades, confira a documentação da Propriedade SqlConnection.ConnectionString.

Habilitar um tempo limite mínimo durante o logon

Aplica-se a: .NET Framework; .NET; .NET Standard

Para evitar que uma tentativa de logon aguarde indefinidamente, você pode definir a opção de AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin como true na inicialização do aplicativo:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin", false);

Desabilitar o comportamento de bloqueio do ReadAsync

Aplica-se a: .NET Framework; .NET; .NET Standard

A partir da versão 3.0, o ReadAsync é executado de forma assíncrona. As versões anteriores executam ReadAsync de forma síncrona e bloqueiam o thread de chamada em .NET Framework. Para desabilitar esse comportamento de bloqueio, você pode definir a opção de AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking como true ou false na inicialização do aplicativo:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking", false);

Habilitar o comportamento nulo da versão de linha

Aplica-se a: .NET Framework; .NET; .NET Standard

A partir da versão 3.0, quando uma versão de linha tem um valor nulo, SqlDataReader retorna um valor DBNull em vez de um byte[] vazio. Para habilitar o comportamento herdado de retornar um byte[] vazio, habilite o seguinte comutador AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior na inicialização do aplicativo.

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior", true);

Suprimir aviso TLS inseguro

Aplica-se a: .NET Framework; .NET; .NET Standard

(Disponível a partir da versão 4.0.1)

Ao usar Encrypt=false na cadeia de conexão, um aviso de segurança será apresentado ao console se a versão do TLS for 1.2 ou inferior. Esse aviso pode ser suprimido habilitando o seguinte comutador AppContext na inicialização do aplicativo:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.SuppressInsecureTLSWarning", true);

Ignorar o parceiro de failover fornecido pelo servidor

Aplica-se a: .NET Framework; .NET; .NET Standard

(Disponível a partir das versões 5.1.8, 6.0.4 e 6.1.3)

Após o failover, as informações do parceiro de failover fornecidas pelo servidor têm preferência sobre as informações do parceiro de failover especificadas na string de conexão. Para ignorar as informações do parceiro de failover fornecidas pelo servidor e considerar apenas as informações do parceiro de failover fornecidas na cadeia de conexão, habilite esta opção AppContext na inicialização do aplicativo:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.IgnoreServerProvidedFailoverPartner", true);

Confira também

Classe AppContext