Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Microsoft.Data.SqlClient namespace contém o fornecedor de dados .NET suportado para bases de dados compatíveis com SQL Server. Começou por ser uma derivação de System.Data.SqlClient e mantém o modelo de programação familiar do ADO.NET, ao mesmo tempo que disponibiliza novas funcionalidades do SQL Server independentemente do runtime do .NET.
Use Microsoft.Data.SqlClient para novos desenvolvimentos.
Instalar e importar o namespace
Adicione o pacote NuGet:
dotnet add package Microsoft.Data.SqlClient
Importar o namespace:
using Microsoft.Data.SqlClient;
A maioria das aplicações utiliza SqlConnection, SqlCommand, SqlParameter, SqlDataReader, e SqlTransaction. Para a superfície pública completa, consulte a referência da API Microsoft. Data.SqlClient.
Relação com o ADO.NET
ADO.NET é o modelo de acesso a dados incorporado no .NET. Define abstrações independentes do fornecedor 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 ligação lógica a uma base 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 | Transmite em fluxo as linhas de resultados a partir do servidor. |
| DbTransaction | SqlTransaction | Agrupa comandos numa única transação que faz commit ou reverte como unidade. |
| DbDataAdapter | SqlDataAdapter | Preenche e atualiza objetos DataSet e DataTable desconectados. |
| DbBatch | SqlBatch | Envia vários comandos num único lote nas plataformas de destino suportadas. |
Microsoft.Data.SqlClient também fornece APIs específicas do SQL Server, tais como:
SqlBulkCopySqlConnectionStringBuilderSqlConfigurableRetryFactorySqlDependency- Autenticação, encriptação e suporte de tipos de dados específicos do SQL Server
Programe com base nas abstrações do ADO.NET quando uma biblioteca tiver de suportar múltiplos fornecedores de bases de dados. Utilize os tipos SqlClient quando uma aplicação tem como alvo o SQL Server e necessita de funcionalidades específicas do fornecedor de dados, como autenticação Microsoft Entra, Always Encrypted, cópia em massa, parâmetros com valor de tabela ou lógica de retentativa configurável. Mantenha o código específico do fornecedor atrás de um limite de acesso aos dados se o resto da aplicação tiver de permanecer independente do fornecedor.
Acesso com e sem ligação
Acesso conectado mantém uma ligação aberta enquanto um comando é executado e enquanto a aplicação lê os seus resultados. Um pedido típico segue esta sequência:
- Cria uma
SqlConnectiona partir de uma cadeia de ligação e abre-a. - Criar um
SqlCommande adicionar valores aSqlParameter. - Execute o comando.
- Processe um valor escalar, uma contagem de linhas afetadas ou um
SqlDataReader. - Elimina o leitor, o comando e a ligação.
Use o acesso conectado para a maioria das APIs web, serviços, trabalhadores e aplicações de linha de comandos.
SqlDataReader transmite linhas em fluxo e normalmente consome menos memória do que carregar todo o resultado para um DataSet.
O acesso desconectado utiliza SqlDataAdapter para copiar dados para uma DataSet ou DataTable em memória. A aplicação pode fechar a ligação enquanto lê ou altera os dados em memória, e depois reconectar-se para submeter atualizações. Usa-o para ligação de dados, relações e restrições em memória, edições offline que reconcilia mais tarde, ou uma aplicação existente construída em torno de DataAdapters. Para novos serviços orientados a pedidos, comece com SqlCommand e SqlDataReader.
Vida útil do objeto e concorrência
Abra e descarte um SqlConnection para cada unidade de trabalho. O pooling de ligações reutiliza a ligação física subjacente, por isso não mantenhas uma ligação global aberta durante toda a vida útil de uma aplicação. Elimine ligaçõ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 o uso simultâneo de múltiplas threads. Atribua a cada operação concorrente a sua própria ligação e recorra ao agrupamento de ligações. Múltiplos Conjuntos de Resultados Ativos (MARS) permitem mais do que um conjunto ativo de resultados numa ligação, mas não torna os objetos SqlClient seguros para threads.
Relação com System.Data.SqlClient
System.Data.SqlClienté o fornecedor mais antigo que vem com o .NET Framework e versões anteriores de .NET.
Microsoft.Data.SqlClient Utiliza muitos dos mesmos nomes de tipos, mas tem pacotes, namespaces, predefinições, funcionalidades e políticas de suporte diferentes.
Não faça referência a ambos os fornecedores 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 normalmente começa por adicionar o Microsoft.Data.SqlClient pacote e alterar as referências do namespace, mas também deve rever a encriptação da ligação, parâmetros, configuração, dependências transitivas e comportamento em tempo de execução. Siga a migração de System.Data.SqlClient para Microsoft.Data.SqlClient antes de implementar.
Compatibilidade de versões
A versão do pacote de drivers é independente da versão .NET da aplicação e da versão do motor da base de dados. Verifica os três:
| Component | O que verificar |
|---|---|
| Microsoft.Data.SqlClient | A linha de lançamento é suportada e contém as funcionalidades que a sua aplicação utiliza. |
| .NET ou .NET Framework | A aplicação visa um runtime suportado por essa versão do driver. |
| Base de dados compatível com SQL Server | A versão do driver suporta a versão da base de dados e o servidor suporta qualquer funcionalidade de protocolo solicitada, como o TDS 8.0. |
Para matrizes atuais, veja ciclo de vida do suporte ao driver SqlClient.
Alterações específicas da versão
As versões de drivers podem adicionar APIs, mover dependências opcionais e alterar valores de segurança por definição. Revise as alterações antes de cada atualização menor ou maior.
Os exemplos incluem:
- A versão 4.0 alterou
Encryptpara assumir por predefiniçãotrue. - A versão 5.0 introduziu
SqlConnectionEncryptOptioneEncrypt=Strictpara o TDS 8.0. - A versão 5.2 introduziu
SqlBatchpara versões modernas do .NET suportadas. - A versão 7.0 moveu a autenticação Microsoft Entra fornecida pelo driver para
Microsoft.Data.SqlClient.Extensions.Azure.
Consulte Novidades no Microsoft.Data.SqlClient para obter ligações para as notas de versão e um resumo da atualização.
Espaços de nomes e pacotes relacionados
Algumas funcionalidades usam tipos fora do namespace principal ou pacotes opcionais.
| Espaço de nomes 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 de diagnóstico fortemente tipados. |
Microsoft.Data.SqlClient.Extensions.Azure |
Autenticação do Microsoft Entra fornecida por controladores 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 infiras os requisitos do pacote apenas a partir de um namespace. Consulte o artigo principal e as informações sobre dependências do pacote NuGet para a versão do driver que utiliza.