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.
O Microsoft.Data.SqlClient namespace contém o provedor de dados .NET suportado para bancos de dados compatíveis com SQL Server. Começou como um fork de System.Data.SqlClient e mantém o modelo de programação ADO.NET familiar, ao mesmo tempo em que disponibiliza novos recursos do SQL Server independentemente do runtime do .NET.
Use Microsoft.Data.SqlClient para novo desenvolvimento.
Instale e importe o namespace
Adicione o pacote NuGet:
dotnet add package Microsoft.Data.SqlClient
Importar o namespace:
using Microsoft.Data.SqlClient;
A maioria das aplicações usa SqlConnection, SqlCommand, SqlParameter, SqlDataReader, e SqlTransaction. Para a superfície pública completa, veja a referência da API Microsoft. Data.SqlClient.
Relação com o ADO.NET
ADO.NET é o modelo de acesso a dados incorporado ao .NET. Ele define abstrações independentes do provedor no namespace System.Data.Common, e a Microsoft.Data.SqlClient fornece as implementações concretas.
| Abstração ADO.NET | Tipo SqlClient | Purpose |
|---|---|---|
| DbConnection | SqlConnection | Abre uma conexão lógica para um banco de dados. |
| DbCommand | SqlCommand | Executa texto Transact-SQL (T-SQL) ou um procedimento armazenado. |
| DbParameter | SqlParameter | Envia um valor digitado separadamente do texto do comando. |
| DbDataReader | SqlDataReader | Os fluxos resultam em linhas para frente a partir do servidor. |
| DbTransaction | SqlTransaction | Agrupa comandos em uma única transação que é confirmada ou revertida como uma unidade. |
| DbDataAdapter | SqlDataAdapter | Preenche e atualiza objetos desconectados DataSet e DataTable. |
| DbBatch | SqlBatch | Envia vários comandos em lote nas plataformas de destino compatíveis. |
Microsoft. Data.SqlClient também fornece APIs específicas do SQL Server, tais como:
SqlBulkCopySqlConnectionStringBuilderSqlConfigurableRetryFactorySqlDependency- Autenticação, criptografia e suporte a tipos de dados específicos do SQL Server
Programe contra abstrações ADO.NET quando uma biblioteca precisa suportar múltiplos provedores de banco de dados. Use os tipos SqlClient quando uma aplicação tem como alvo o SQL Server e precisa de recursos específicos do provedor, como autenticação Microsoft Entra, Always Encrypted, cópia em massa, parâmetros de tabela ou lógica de retentativa configurável. Mantenha o código específico do provedor atrás de um limite de acesso aos dados se o restante da aplicação deve permanecer independente do provedor.
Acesso conectado e desconectado
O acesso conectado mantém a conexão aberta enquanto um comando é executado e enquanto o aplicativo lê seus resultados. Uma solicitação típica segue esta sequência:
- Crie uma
SqlConnectiona partir de uma cadeia de conexão e abra-a. - Crie um
SqlCommande adicioneSqlParametervalores. - Execute o comando.
- Processe um valor escalar, uma contagem de linhas afetadas ou um
SqlDataReader. - Libere o leitor, o comando e a conexão.
Use o acesso conectado para a maioria das APIs web, serviços, trabalhadores e aplicações de linha de comando.
SqlDataReader transmite linhas em fluxo e costuma usar menos memória do que carregar todo o resultado em um DataSet.
O acesso desconectado usa SqlDataAdapter para copiar dados em um DataSet ou DataTable na memória. A aplicação pode fechar a conexão enquanto lê ou altera os dados em memória, e então se reconectar para enviar atualizações. Use isso para associação de dados, relações e restrições na memória, edições offline que você reconcilia posteriormente ou um aplicativo existente criado em torno de DataAdapters. Para novos serviços orientados a requisições, comece com SqlCommand e SqlDataReader.
Vida útil do objeto e concorrência
Abra e descarte um SqlConnection para cada unidade de trabalho. O pool de conexões reutiliza a conexão física subjacente, então não mantenha uma conexão global aberta durante toda a vida útil de uma aplicação. Descarte conexões, comandos, leitores, transações e objetos de cópia em massa rapidamente. No código assíncrono, use await using para tipos que implementam IAsyncDisposable no framework de destino, como SqlConnection e SqlDataReader em .NET, e using comum para tipos que implementam apenas IDisposable, como SqlBulkCopy.
SqlConnection, SqlCommand, SqlDataReader, e SqlTransaction não suportam uso simultâneo de múltiplas threads. Dê a cada operação concorrente sua própria conexão e confie no pooling de conexão. Múltiplos Conjuntos de Resultados Ativos (MARS) permite mais de um conjunto de resultados ativo em uma conexão, mas não torna os objetos SqlClient seguros para uso em threads.
Relação com System.Data.SqlClient
System.Data.SqlClienté o provedor mais antigo que vem com o .NET Framework e versões anteriores de .NET.
Microsoft.Data.SqlClient Usa muitos dos mesmos nomes de tipos, mas possui pacotes, namespaces, padrão, recursos e políticas de suporte diferentes.
Não faça referência a ambos os provedores no novo código da aplicação. Tipos com o mesmo nome dos dois pacotes não são intercambiáveis. Um System.Data.SqlClient.SqlConnection, por exemplo, não pode ser passado onde um Microsoft.Data.SqlClient.SqlConnection é exigido.
A migração geralmente começa adicionando o Microsoft.Data.SqlClient pacote e alterando as referências do namespace, mas você também deve revisar a criptografia da conexão, parâmetros, configuração, dependências transitivas e comportamento em tempo de execução. Siga Migrar de System.Data.SqlClient para Microsoft.Data.SqlClient antes de implantar.
Compatibilidade entre versões
A versão do pacote de driver é independente da versão .NET da aplicação e da versão do motor de banco de dados. Confira os três:
| Component | O que verificar |
|---|---|
| Microsoft.Data.SqlClient | A linha de lançamento é suportada e contém os recursos que seu aplicativo utiliza. |
| .NET ou .NET Framework | O aplicativo tem como alvo um runtime suportado por essa liberação do driver. |
| Banco de dados compatível com SQL Server | A versão do driver suporta a versão do banco de dados e o servidor suporta qualquer recurso de protocolo solicitado, como o TDS 8.0. |
Para matrizes atuais, veja o ciclo de vida do suporte ao driver SqlClient.
Alterações específicas à versão
As versões de drivers podem adicionar APIs, mover dependências opcionais e alterar padrões de segurança. Revise as mudanças antes de cada atualização menor ou maior.
Os exemplos incluem:
- A versão 4.0 mudou
Encryptpara padrão paratrue. - A versão 5.0 introduziu
SqlConnectionEncryptOptioneEncrypt=Strictpara TDS 8.0. - A versão 5.2 introduziu
SqlBatchem destinos .NET modernos compatíveis. - A versão 7.0 moveu a autenticação do Microsoft Entra fornecida pelo driver para
Microsoft.Data.SqlClient.Extensions.Azure.
Veja O que há de novo em Microsoft.Data.SqlClient para links para as notas de versão e um resumo da atualização.
Namespaces e pacotes relacionados
Alguns recursos usam tipos fora do namespace principal ou pacotes opcionais.
| Namespace ou pacote | Purpose |
|---|---|
Microsoft.Data.SqlClient.Server |
Implementações SqlClient de SqlDataRecord e SqlMetaData. |
Microsoft.Data.SqlTypes |
Tipos específicos de SqlClient, como SqlFileStream, SqlJson, e SqlVector<T>. |
Microsoft.Data.SqlClient.Diagnostics |
Payloads de eventos diagnósticos fortemente tipados. |
Microsoft.Data.SqlClient.Extensions.Azure |
Autenticação do Microsoft Entra fornecida pelo driver para a versão 7.0 e versões posteriores. |
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider |
Integração com Azure Key Vault para Always Encrypted. |
Não infira os requisitos do pacote apenas a partir de um namespace. Consulte o artigo sobre o recurso e as informações de dependência do pacote NuGet referentes à versão do driver que você usa.