Arquitetura ADO.NET com Microsoft. Data.SqlClient

ADO.NET é o modelo de acesso a dados incorporado no .NET. Microsoft. Data.SqlClient implementa esse modelo para bases de dados compatíveis com SQL Server e adiciona capacidades específicas do SQL Server.

A página de destino da Microsoft. Data.SqlClient fornece o mapa de funcionalidades do driver e a linha base de produção. Este artigo explica como o driver se integra no ADO.NET.

Abstrações ADO.NET e tipos SqlClient

O ADO.NET define abstrações independentes do fornecedor no System.Data.Common namespace. Microsoft. Data.SqlClient fornece 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 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 atómica.
DbDataAdapter SqlDataAdapter Preenche e atualiza objetos DataSet e DataTable desconectados.
DbBatch SqlBatch Envia vários comandos num único lote nas plataformas de destino suportadas.

Programe com base nas abstrações do ADO.NET quando uma biblioteca tiver de suportar múltiplos fornecedores de bases de dados. Use os tipos SqlClient quando uma aplicação tem como alvo o SQL Server e precisa de funcionalidades específicas do fornecedor.

Acesso a dados conectados

O acesso ligado mantém uma ligação disponível enquanto um comando é executado e enquanto a aplicação lê os seus resultados.

Um pedido comum segue esta sequência:

  1. Crie uma SqlConnection a partir de uma cadeia de ligação.
  2. Abra a conexão.
  3. Criar um SqlCommand e adicionar valores a SqlParameter.
  4. Execute o comando.
  5. Processar um valor escalar, o número de linhas afetadas ou SqlDataReader.
  6. 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.

Abrir e eliminar um SqlConnection para cada unidade de trabalho é o padrão habitual. O agrupamento de ligações reutiliza a ligação física subjacente. Não mantenha uma ligação global aberta durante toda a vida útil de uma aplicação.

Acesso de dados desligado

SqlDataAdaptertransfere dados entre o SQL Server e um arquivo em memória DataSet ou DataTable. 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.

Use acesso desligado quando precisar de:

  • Ligação de dados a DataSet ou DataTable.
  • Relações e restrições na memória.
  • Edições offline que são reconciliadas mais tarde.
  • Compatibilidade com uma aplicação existente construída em torno de DataAdapters.

Para novos serviços orientados a pedidos, comece com SqlCommand e SqlDataReader a menos que precise do modelo de objetos desconectados.

Funcionalidades específicas do SQL Server

Microsoft. O Data.SqlClient adiciona APIs e comportamentos de ligação que não fazem parte do contrato ADO.NET independente do fornecedor:

  • Funções de retorno de autenticação e de token de acesso do Microsoft Entra.
  • TDS 8.0 encriptação rigorosa e opções de certificado SQL Server.
  • Enclaves sempre encriptados e seguros.
  • SqlBulkCopy para carregamento de dados de alto rendimento.
  • Parâmetros com valores de tabela.
  • Tipos de dados do SQL Server, incluindo tipos JSON e vetoriais.
  • Lógica configurável de tentativas.
  • Diagnósticos, estatísticas e contadores do SQL Server.
  • Grupo de disponibilidade e opções de ligação por failover.

Usar estas funcionalidades liga esse código à Microsoft. Data.SqlClient. 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.

Vida útil do objeto e concorrência

Elimine ligações, comandos, leitores, transações e objetos de cópia em massa rapidamente. Use await using com código assíncrono quando um tipo implementa IAsyncDisposable.

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.

Pacotes e espaços de nomes

Instala o Microsoft.Data.SqlClient pacote NuGet e importa o Microsoft.Data.SqlClient namespace. O driver é fornecido de forma independente do .NET, pelo que os seus calendários de funcionalidades, lançamento e suporte diferem do runtime .NET.

System.Data.SqlClient é o prestador mais antigo. Usa a Microsoft. Data.SqlClient para novos desenvolvimentos. Para uma aplicação existente, siga Migrar de System.Data.SqlClient para Microsoft. Data.SqlClient.