Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Microsoft.Data.SqlClient é o provedor de dados .NET com suporte para SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Azure Synapse Analytics, banco de dados SQL no Microsoft Fabric e Data Warehouse no Microsoft Fabric. Ele é distribuído como um pacote NuGet, evolui independentemente do tempo de execução .NET e substitui System.Data.SqlClient para novos desenvolvimentos. Ele fornece conexões, comandos, processamento de resultados, transações, cópia em massa e recursos específicos do SQL Server para aplicações .NET.
Escolha o ponto de partida
- Para configurar um projeto e rodar sua primeira consulta, comece com Comece com o driver SqlClient.
- Para criar um banco de dados ao qual se conectar, consulte os pré-requisitos em Introdução ao driver SqlClient.
- Para adicionar ou atualizar o driver em um projeto .NET, vá em Instalar, atualizar e implantar Microsoft. Data.SqlClient.
- Para conectar ao SQL do Azure com autenticação sem senha, comece com a autenticação Microsoft Entra e as strings de conexão.
- Para tornar uma aplicação existente resiliente a falhas transitórias, vá para Lógica de retentativa configurável e Alta disponibilidade e recuperação de desastres.
- Para mover conjuntos de dados grandes de forma eficiente, vá para Operações de cópia em massa.
- Para migrar de
System.Data.SqlClient, comece com Migrar de System.Data.SqlClient para Microsoft. Data.SqlClient. - Para diagnosticar um problema de conexão ou consulta, acesse o guia de solução de problemas do SqlClient e ative o rastreamento da fonte de eventos.
Linha de base de produção para SQL do Azure
Use este trecho como ponto de partida para um caminho de acesso a dados SQL do Azure orientado à produção. Ele lê os nomes dos servidores e do banco de dados de IConfiguration, então os valores vêm dos provedores de configuração que o host conecta, como appsettings.json, variáveis de ambiente, Configuração de Aplicativos do Azure e configurações respaldadas pelo Key Vault. A configuração combina estas características:
- Segurança da Camada de Transporte (TLS).
- Identidade gerenciada.
- Resiliência da conexão ociosa.
- Retentativa de conexão inicial por meio de lógica configurável de retentativas (CRL), com logging estruturado.
- Retentativa em nível de comando para erros transitórios que ocorrem durante a consulta.
- Recuperação de grupo de failover rápido.
- Chamadas assíncronas que aceitam um token de cancelamento.
Para maior segurança e suporte à configuração em diferentes ambientes, mantenha as informações de conexão fora do seu código. Em produção, armazene as informações de conexão no sistema de configuração do seu aplicativo e use o Azure Key Vault para valores sensíveis. Para obter mais informações, confira Proteger informações de conexão.
O trecho de C# deste artigo omite as diretivas using e os encapsulamentos de classe por brevidade.
O snippet pressupõe um projeto que tem como alvo versões .NET 8 ou posteriores e faz referência aos pacotes Microsoft.Data.SqlClient e Microsoft.Data.SqlClient.Extensions.Azure 7.1.1. O host, como o .NET Generic Host ou ASP.NET Core, fornece o ILogger e o IConfiguration, e a configuração fornece o nome do servidor em Sql:Server e o nome do banco de dados em Sql:Database.
public static async Task<string> QueryDatabaseNameAsync(
IConfiguration config, ILogger logger, CancellationToken cancellationToken = default)
{
string server = config["Sql:Server"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Server'.");
string database = config["Sql:Database"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Database'.");
var builder = new SqlConnectionStringBuilder
{
DataSource = server,
InitialCatalog = database,
Authentication = SqlAuthenticationMethod.ActiveDirectoryManagedIdentity,
Encrypt = SqlConnectionEncryptOption.Strict, // TDS 8.0 encryption (server must support it)
ConnectTimeout = 30, // per-attempt connect timeout in seconds
// Retry transient failures during Open() and reconnect a dropped idle connection.
// The configurable provider below adds another policy around Open().
ConnectRetryCount = 3,
ConnectRetryInterval = 10,
MultiSubnetFailover = true, // recommended for TCP endpoints; enables parallel connect
// ApplicationIntent = ApplicationIntent.ReadOnly, // uncomment to route to a readable secondary
};
// Add exponential backoff and jitter around Open().
// TransientErrors is null, so the provider uses the driver's built-in transient error list.
var openRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 5,
DeltaTime = TimeSpan.FromSeconds(3),
MaxTimeInterval = TimeSpan.FromSeconds(60),
});
openRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL connection to {Server}/{Database} (attempt {Attempt}) after {Delay}",
server, database, args.RetryCount, args.Delay);
};
// Retry commands that hit deadlocks, lock timeouts, or common Azure SQL transient errors
// mid-query on an established connection. Only attach this provider to commands whose
// effect is safe to repeat.
var commandRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 4,
DeltaTime = TimeSpan.FromSeconds(5),
MaxTimeInterval = TimeSpan.FromSeconds(30),
// Deadlock victim, lock-request timeout, and common Azure SQL transient errors.
TransientErrors = new[] { 1205, 1222, 10928, 10929, 40197, 40501, 40613, 49918 },
});
commandRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL command (attempt {Attempt}) after {Delay}",
args.RetryCount, args.Delay);
};
await using var connection = new SqlConnection(builder.ConnectionString)
{
RetryLogicProvider = openRetry,
};
await connection.OpenAsync(cancellationToken);
await using var command = new SqlCommand("SELECT DB_NAME()", connection)
{
RetryLogicProvider = commandRetry,
CommandTimeout = 30,
};
var name = (string)await command.ExecuteScalarAsync(cancellationToken);
logger.LogInformation("Connected to database {DatabaseName}", name);
return name;
}
O método retorna o nome do banco de dados ao qual ele se conectou e registra Connected to database <database>. Quando uma nova tentativa acontece, ela também registra um aviso por nova tentativa, com a exceção que a desencadeou.
Como cada parte do trecho funciona:
- Alvos: Qualquer endpoint do SQL Mecanismo de Banco de Dados configurado para autenticação Microsoft Entra: Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, banco de dados SQL no Microsoft Fabric e SQL Server 2022 e versões posteriores em Máquinas Virtuais do Azure ou habilitados pelo Azure Arc.
-
Encrypt = SqlConnectionEncryptOption.Strict: Seleciona criptografia TDS 8.0. Ele requer versões SQL Server 2022 e posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou SQL Database no Microsoft Fabric. UseSqlConnectionEncryptOption.Mandatorypara servidores antigos. -
ActiveDirectoryManagedIdentity: Funciona apenas quando uma identidade gerenciada está disponível, como Serviço de Aplicativo do Azure, Azure Functions ou uma máquina virtual Azure. Para desenvolvimento local, useSqlAuthenticationMethod.ActiveDirectoryDefault, que tenta o CLI do Azure, o login do Visual Studio e outras fontes de credenciais. Não use isso em produção porque sondar cada fonte desacelera a conexão. Para mais informações, veja Usar autenticação padrão. -
MultiSubnetFailover = true: Tenta conexões TCP para todos os endereços IP resolvidos em paralelo e usa a primeira conexão que tem sucesso, evitando a varredura sequencial lenta de cada IP. Defina para Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, banco de dados SQL no Microsoft Fabric, ouvintes de grupos de disponibilidade e instâncias de cluster de failover. É seguro em alvos de IP único. Não é suportado para instâncias nomeadas, protocolos além do TCP, instâncias com mais de 64 endereços IP nem para espelhamento de banco de dados, que está obsoleto. Use Grupos de disponibilidade AlwaysOn em vez disso. Para mais informações, veja Alta disponibilidade e recuperação em caso de desastres e Desabilitando a Resolução Transparente de IP de Redes. -
ConnectRetryCount = 3eConnectRetryInterval = 10: o driver tenta novamente as falhas transitórias qualificadas duranteOpen()e reconecta uma conexão ociosa perdida no próximo comando. A contagem padrão é 1. Três tentativas com 10 segundos de diferença ultrapassam uma reconfiguração ou failover mais longo. O driver altera o valor de 1 para 2 somente quando o nome do servidor termina em um domínio de SQL do Azure conhecido, como.database.windows.net, portanto, um alias de DNS personalizado recebe 1. -
openRetry: atribuído a SqlConnection.RetryLogicProvider, adiciona retirada exponencial em torno deOpen(). O driver para suas tentativas internas quandoConnectTimeoutexpira, então o pior caso antes queOpenAsynclance uma exceção é cinco tentativas de até 30 segundos cada, mais backoff. Cada tentativa de reconexão ociosa também executa a política completaopenRetry, e quando essa política esgota suas tentativas, a recuperação inativa termina. -
Pausa automática do serverless: Para Banco de Dados SQL do Azure serverless, aumente
ConnectTimeoutpara pelo menos 60 segundos. O primeiroOpen()pode ter falha com erro40613enquanto o banco de dados é retomado, eopenRetrytenta novamente. Um tempo limite do lado do cliente aparece como erro-2, que não é repetido, portanto, cada tentativa de conexão deve durar mais do que a retomada. Para mais informações, consulte Pausa automática e retomada automática. -
commandRetry: anexe ao SqlCommand.RetryLogicProvider somente quando o comando puder ser reproduzido com segurança: leituras,MERGEprotegido por chave natural, operações de upsert por meio de um procedimento armazenado e outras operações idempotentes. Ele ignora a tentativa de repetição dentro de uma transação, portanto, o código do aplicativo deve repetir transações de várias instruções.ExecuteReadereExecuteScalartentam novamente somente os erros retornados antes do início do primeiro conjunto de resultados.ExecuteNonQueryrepete toda a chamada. -
Lista de erros transitórios: A configuração
TransientErrorssubstitui a lista embutida. Para estendê-lo em vez disso, use SqlConfigurableRetryFactory.BaselineTransientErrors (Microsoft.Data.SqlClient 7.0 e versões posteriores). -
RetryingEvento: Retrying Dispara antes de cada tentativa com a contagem de tentativas, o próximo atraso e as exceções até agora. Roteie para ILogger ou para seu pipeline de telemetria. - Exceções: O método não captura exceções. Um provedor esgotado lança AggregateException com a exceção de cada tentativa. Um erro não transitório se propaga como a exceção original. O chamador registra isso uma vez junto com o restante do contexto da solicitação.
-
Cancelamento: O CancellationToken interrompe a espera do provedor entre as tentativas. Isso não interrompe a espera do driver
ConnectRetryIntervalem uma únicaOpententativa. Para mais informações, veja Programação assíncrona. - Vida útil do provedor: O trecho cria os provedores de retentativa em cada chamada para permanecer autossuficiente. Em uma aplicação, crie-as uma vez e reutilize-as.
Para obter mais informações sobre cada parte dessa configuração, consulte:
- Strings de conexão
- Autenticação do Microsoft Entra
- Criptografia e validação de certificado
- Lógica de repetição configurável
- Alta disponibilidade e recuperação de desastre
Aprenda as tarefas principais de acesso a dados
Depois de se conectar, use estes artigos em ordem:
- Executar um comando para escolher uma forma de resultado e executar Transact-SQL (T-SQL).
- Configure os parâmetros para corresponder ao contrato do banco de dados.
- Recupere dados com o SqlDataReader para processar linhas e múltiplos resultados.
- Modificar dados com procedimentos armazenados para usar parâmetros de saída e valores de retorno.
- Use programação assíncrona e cancelamento para adicionar cancelamento pelo chamador e tempos limite restritos.
- Gerencie erros e mensagens antes de adicionar retentativas ou diagnósticos de produção.
Características principais
- Suporte moderno para .NET: Funciona nas versões atuais do .NET e do .NET Framework. Para o detalhamento por versão, veja ciclo de vida do suporte.
-
Criptografado por padrão: conexões criptografadas TLS com
Encrypt=truecomo padrão. ConfigureEncrypt=Strictpara criptografia TDS 8.0. - Autenticação do Microsoft Entra ID: conexões sem senha com identidade gerenciada, entidade de serviço e fluxos interativo, integrado, de cadeia de credenciais padrão e de token de acesso.
- Kerberos e NTLM: autenticação integrada do Windows para o Active Directory local e cenários legados.
- Always Encrypted: criptografia do lado do cliente para colunas sensíveis, com enclaves seguros opcionais para operações no local.
- Cópia em massa: inserções em alta taxa de transferência com SqlBulkCopy.
- Pooling de conexão: Ativado por padrão. Um pool V2 opt-in está em avaliação.
-
Resiliência da conexão: tentativas automáticas de conexão integradas (
ConnectRetryCounteConnectRetryInterval), além de lógica de repetição opcional e configurável para conexões e comandos. -
Tipos de dados avançados do SQL Server:
datetimeoffset,sql_variant, JSON, vetor, dados espaciais, XML e parâmetros com valor de tabela. - Diagnóstico: rastreamento de fontes de eventos, contadores de diagnóstico, estatísticas de provedores e um guia dedicado à resolução de problemas.
-
Identidade da aplicação: Defina
SqlConnection.RegisteredApplicationpara identificar sua biblioteca ou ferramenta para SQL Server (Microsoft. Data.SqlClient 7.1 e versões posteriores).
Introdução
| Artigo | Description |
|---|---|
| Comece a usar o driver SqlClient | Configure um projeto, crie um banco de dados, conecte-se, consulte e adicione resiliência de conexão. |
| Instalar, atualizar e implantar a Microsoft. Data.SqlClient | Instale pacotes NuGet, escolha uma versão, atualize o driver e prepare a saída de implantação. |
| Ciclo de vida do suporte | Revise as versões dos drivers suportados e as datas de suporte. |
| Migre do System.Data.SqlClient para a Microsoft. Data.SqlClient | Atualize referências de pacotes, namespaces, configuração e altere o comportamento dos drivers. |
| namespace Microsoft.Data.SqlClient e compatibilidade | Entenda como o SqlClient implementa o ADO.NET e sua compatibilidade com System.Data.SqlClient, .NET e SQL Server. |
| O que há de novo na Microsoft. Data.SqlClient | Encontre versões atuais, principais mudanças de atualização e notas de lançamento upstream. |
Configuração e conexão
| Artigo | Description |
|---|---|
| Conectar-se a uma fonte de dados | Abra e gerencie conexões, e responda a mudanças no estado da conexão. |
| Strings de conexão | Configure servidor, banco de dados, autenticação, criptografia e comportamento de conexão. |
| Criptografia e validação de certificado | Configure conexões criptografadas e validação de certificados de servidor. |
| Pooling de conexões do SQL Server | Reutilize as conexões físicas de forma eficiente. |
| Lidar com erros e mensagens | Detectar erros e receber mensagens informativas. |
Autenticar e proteger
| Artigo | Description |
|---|---|
| Melhores práticas de segurança para Microsoft.Data.SqlClient | Revise as orientações de autenticação, autorização e segurança de aplicações. |
| Autenticação do Microsoft Entra | Conecte-se com identidade gerenciada, principal de serviço, senha e fluxos interativos. |
| Proteger as informações de conexão | Mantenha credenciais e configurações de conexão fora do código da aplicação. |
| Sempre Criptografado | Proteja valores sensíveis de colunas do sistema de banco de dados. |
| Always Encrypted com enclaves seguros | Execute operações avançadas com dados criptografados em um enclave seguro. |
Recuperar e atualizar dados
| Artigo | Description |
|---|---|
| Executar um comando | Execute instruções SQL parametrizadas e procedimentos armazenados. |
| DataAdapters e DataReaders | Transmitir conjuntos de resultados ou preencher estruturas de dados desconectadas. |
| Execute múltiplos comandos com SqlBatch | Envie uma coleção ordenada de comandos e processe seus resultados. |
| Dados do fluxo | Transfira valores grandes de binário, texto, XML e JSON sem armazenar em buffer o valor completo. |
| Transações e simultaneidade | Use transações locais e distribuídas e controles de concorrência. |
| Recuperar informações do esquema do banco de dados | Descubra coleções e restrições de esquemas. |
| Operações de cópia em massa | Carregue grandes conjuntos de dados de forma eficiente com SqlBulkCopy. |
| Parâmetros com valor de tabela | Envie várias linhas para uma instrução parametrizada ou procedimento armazenado. |
| MARS (conjunto de resultados ativos múltiplos) | Interlaçe múltiplos lotes em uma única conexão. |
Tipos de dados
| Artigo | Description |
|---|---|
| Mapeamentos de tipos de dados do SQL Server | Mapeie os tipos de SQL Server para tipos de .NET e de System.Data.SqlTypes. |
| Dados JSON | Envie e recupere o tipo de dado json do SQL Server. |
| Dados vetoriais | Envie e recupere valores vetoriais. |
| Dados XML | Leia, escreva e parametrize valores XML. |
| Dados binários e de grande valor | Transmita e atualize dados binários, FILESTREAM e dados de grande valor. |
Confiabilidade e diagnóstico
| Artigo | Description |
|---|---|
| Lógica de repetição configurável | Tente novamente em caso de falhas transitórias de conexão e de comando com políticas com limites definidos. |
| Alta disponibilidade e recuperação de desastre | Conecte-se a ouvintes de grupos de disponibilidade e parceiros de failover. |
| Contadores de eventos no SqlClient | Monitore conexões ativas, conexões em pool e outras métricas do driver. |
| Habilitar rastreamento de fontes de eventos | Capture eventos detalhados do motorista para diagnóstico. |
| Guia de solução de problemas do SqlClient | Diagnostique problemas comuns de conexão e drivers. |
| Notificações de consulta | Receba notificações quando os resultados da consulta mudam. |
Recursos do SQL Server
| Artigo | Description |
|---|---|
| Recursos do SQL Server e ADO.NET | Navegue por recursos específicos do SQL Server disponíveis através do SqlClient. |
| LocalDB | Conecte-se às instâncias do SQL Server Express LocalDB. |
| Descoberta e classificação de dados | Leia metadados de classificação de sensibilidade dos conjuntos de resultados. |
Referências e recursos
| Artigo | Description |
|---|---|
| Referência da API Microsoft.Data.SqlClient | Consulte a referência da API .NET para o driver. |
| Mudanças no AppContext | Configure o comportamento de compatibilidade e segurança. |
| Repositório do GitHub do Microsoft.Data.SqlClient | Leia o código-fonte do driver, as notas de lançamento e exemplos. |
| Exemplos do Microsoft.Data.SqlClient | Veja exemplos de APIs de driver em C#. |
| Repositório do .NET Runtime no GitHub | Leia o código-fonte das bibliotecas de runtime .NET. |
Solicitar um recurso
Para solicitar um recurso, abra uma questão no repositório Microsoft. Data.SqlClient GitHub.