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.
ODBC é a principal API nativa de acesso a dados para aplicativos escritos em C e C++ para SQL Server. O Microsoft ODBC Driver for SQL Server estabelece ligação ao SQL Server, ao Base de Dados SQL do Azure, ao Azure SQL Managed Instance, ao Azure Synapse Analytics e à base de dados SQL do Microsoft Fabric. Para as versões da base de dados que cada versão de driver suporta, consulte compatibilidade de versões SQL.
Outras linguagens que podem usar ODBC incluem COBOL, Perl, PHP e Python. O ODBC é amplamente utilizado em cenários de integração de dados, e os drivers Microsoft para PHP para SQL Server são construídos sobre este driver.
Os utilitários sqlcmd e bcp funcionam com este driver, mas instalam-se separadamente: o mssql-tools18 pacote no Linux e macOS, e os Microsoft Command Line Utilities no Windows. Use sqlcmd para executar instruções Transact-SQL (T-SQL), procedimentos do sistema e ficheiros de script. Utilize bcp para copiar dados em massa entre uma instância do SQL Server e um ficheiro de dados, em ambas as direções.
Escolhe o teu ponto de partida
- Para instalar o driver, vá a Requisitos do sistema, instalação e ficheiros do driver para Windows, ou instale o driver ODBC no Linux, instale o driver ODBC no macOS e instale o gestor de drivers unixODBC.
- Para escrever a tua primeira aplicação, vai a Connect to e consulta uma base de dados com C++, depois DSN e palavras-chave e atributos de cadeia de ligação para as opções de cadeia de ligação. Se o seu compilador não conseguir encontrar os cabeçalhos ou se a sua compilação não conseguir fazer a ligação, vá a Desenvolver aplicações C e C++ com o controlador ODBC.
- Para se ligar ao SQL do Azure com autenticação sem palavra-passe, vá a Use Microsoft Entra ID com o driver ODBC.
- Para tornar uma aplicação existente resiliente a falhas transitórias, vá a Resiliência de Conexões e Alta Disponibilidade e Recuperação em Desastres.
- Para atualizar da versão 17, vá a Diferenças principais de versão e Resolução de problemas de encriptação de conexão.
- Para diagnosticar um problema de ligação ou de consulta, vá para Resolução de problemas de encriptação da ligação e Problemas conhecidos (Linux e macOS).
Linha de base de produção para o SQL do Azure
Use este excerto como ponto de partida para uma ligação SQL do Azure orientada para produção. Carrega o nome do servidor e o nome da base de dados a partir da configuração da aplicação, autentica-se com uma identidade gerida para que não apareça segredo na cadeia de ligação, e permite a encriptação do Tabular Data Stream (TDS) 8.0 com validação completa do certificado. Define um tempo limite de início de sessão por tentativa e repete as tentativas em caso de falhas transitórias, com recuo exponencial e jitter.
O excerto em C++ neste artigo omite as diretivas include, a alocação de handles e a função auxiliar de registo por uma questão de brevidade.
std::wstring BuildConnectionString(const wchar_t* server, const wchar_t* database) {
std::wstring cs = L"Driver={ODBC Driver 18 for SQL Server}";
cs += L";Server=tcp:"; cs += server; cs += L",1433";
cs += L";Database="; cs += database;
cs += L";Authentication=ActiveDirectoryMsi"; // managed identity, no stored secret
cs += L";Encrypt=strict"; // TDS 8.0 with certificate validation
cs += L";ConnectRetryCount=3"; // idle connection resiliency, not initial connect
cs += L";ConnectRetryInterval=10";
return cs;
}
// Transient fault codes documented for Azure SQL, plus the resource governance
// codes. Network termination and timeout errors (64, 233, 258, 10053, 10054,
// 10060) are retried a bounded number of times, which is the documented
// guidance for them. 258 is the code the driver reports for a connect timeout.
// 10053 and 10054 can also mean the encryption handshake failed rather than a
// plain network reset, so read the error text before assuming a network fault.
bool IsTransient(SQLINTEGER nativeError) {
switch (nativeError) {
case 615: case 926: case 4060: case 4221:
case 10928: case 10929: case 10936:
case 40197: case 40501: case 40613:
case 42108: case 42109:
case 49918: case 49919: case 49920:
case 40020: case 40143: case 40166: case 40540: // failover subcodes
case 64: case 233: case 258:
case 10053: case 10054: case 10060:
return true;
default:
return false;
}
}
// Retries only errors that a new connection can clear, with exponential backoff
// plus jitter so that concurrent clients don't retry in lockstep.
SQLRETURN ConnectWithRetry(SQLHDBC hDbc, const std::wstring& connectionString, int maxAttempts) {
SQLRETURN rc = SQL_ERROR;
for (int attempt = 1; attempt <= maxAttempts; ++attempt) {
// Set the per-attempt connect timeout through the connection attribute.
// This works on every driver version, so the sample doesn't depend on
// which connection string keywords a given release accepts.
SQLSetConnectAttrW(hDbc, SQL_ATTR_LOGIN_TIMEOUT,
reinterpret_cast<SQLPOINTER>(static_cast<SQLLEN>(30)), 0);
rc = SQLDriverConnectW(hDbc, nullptr,
const_cast<SQLWCHAR*>(reinterpret_cast<const SQLWCHAR*>(connectionString.c_str())),
SQL_NTS, nullptr, 0, nullptr, SQL_DRIVER_NOPROMPT);
if (SQL_SUCCEEDED(rc)) {
Log("INFO", "connected on attempt %d/%d", attempt, maxAttempts);
return rc;
}
// Walks the diagnostic records and returns the first record that carries
// a real SQL Server error number. Microsoft Entra failures report several
// driver-specific records first, whose native error is 0.
SQLINTEGER native = LogDiagnostics(SQL_HANDLE_DBC, hDbc, "connect");
if (attempt == maxAttempts || !IsTransient(native)) return rc;
// Cap the backoff at 64 seconds. This also keeps the shift in range
// when a caller passes a large maxAttempts.
int shift = (attempt - 1 < 6) ? attempt - 1 : 6;
DWORD delayMs = (1UL << shift) * 1000UL + (DWORD)(GetTickCount64() % 500);
Log("WARN", "retrying in %lu ms (attempt %d/%d)", delayMs, attempt + 1, maxAttempts);
Sleep(delayMs);
}
return rc;
}
ConnectRetryCount e ConnectRetryInterval ativam a resiliência da ligação inativa, que restaura de forma transparente uma ligação que foi interrompida durante a inatividade. Eles não tentam novamente a ligação inicial, razão pela qual este snippet também implementa uma retentativa ao nível da aplicação. Mantém ambos.
O ODBC apresenta diagnósticos através de SQLGetDiagRec, e não apenas do código de retorno, pelo que classifique os erros antes de voltar a tentar. Uma operação falha imediatamente devido a um erro de autenticação ou de configuração, em vez de consumir todo o limite de tentativas de repetição.
Para mais informações sobre cada parte desta configuração, veja:
- Palavras-chave e atributos de DSN e de cadeias de ligação
- Utilizar o Microsoft Entra ID com o controlador ODBC
- Resolução de problemas de encriptação de ligação
- Resiliência da ligação
- Alta disponibilidade e recuperação de desastres
Para o catálogo de erros transitórios do SQL do Azure, consulte códigos de erro de falha transitória.
Principais características
- Multiplataforma: A mesma API no Windows, Linux e macOS.
- Autenticação do Microsoft Entra ID: Ligações sem palavra-passe com identidade gerida, entidade de serviço e fluxos interativos e integrados.
- Encriptação rigorosa: ligações TDS 8.0 com validação completa de certificados na versão 18 e versões posteriores.
- Always Encrypted: Encriptação do lado do cliente para colunas sensíveis, com suporte para provedores personalizados de arquivo de chaves.
- Resiliência da ligação: Restauração transparente de uma ligação que caiu enquanto estava inativa.
-
Alta disponibilidade: Disponibilidade de apoio de ouvintes em grupo com
MultiSubnetFailover. - Classificação de dados: Metadados de sensibilidade para colunas classificadas.
- Tipo de dado vetorial: Suporte nativo para o tipo vetorial .
- Transações distribuídas: Suporte a transações XA através do Coordenador de Transações Distribuídas da Microsoft (MSDTC).
- Ferramentas complementares: sqlcmd e bcp, instaladas separadamente.
Introdução
| Artigo | Description |
|---|---|
| Descarregar o Controlador ODBC para SQL Server | Instaladores e transferências de pacotes para todas as versões de controladores suportadas, para as três plataformas. |
| Desenvolver aplicações em C e C++ com o driver ODBC | Quais os cabeçalhos a incluir, por que ordem, que bibliotecas a ligar e como escolher entre execução assíncrona e threads. |
| Ligue-se e consulte uma base de dados com C++ | Um exemplo completo em C++ que liga, executa uma consulta e lê resultados, para que possas confirmar a tua configuração de ponta a ponta. |
| Ciclo de vida do suporte | Quais as versões dos drivers ainda suportadas e a data em que cada uma sai do suporte. |
| Principais diferenças de versão | O que falha quando se passa da versão 17 para a versão 18, começando pela alteração padrão da encriptação. |
Instale o controlador
| Artigo | Description |
|---|---|
| Requisitos do sistema, instalação e ficheiros de drivers (Windows) | Versões do Windows suportadas, a linha de comandos do instalador para instalação silenciosa e onde cada ficheiro do controlador é guardado no disco. |
| Requisitos do sistema (Linux e macOS) | Quais distribuições Linux e versões do macOS suportam cada versão do driver, além da compatibilidade com versões do SQL Server. |
| Instale o controlador ODBC no Linux | Etapas do gestor de pacotes para Alpine, Debian, Red Hat, SUSE, Ubuntu e Azure Linux, além da instalação offline e das localizações dos ficheiros dos drivers. |
| Instale o driver ODBC no macOS | Passos para o tap e as fórmulas do Homebrew no macOS, incluindo como instalar a versão 18, 17 ou 13.1. |
| Instale o gestor de drivers unixODBC (Linux e macOS) | Instale ou atualize o unixODBC, o gestor de drivers que carrega o driver ODBC no Linux e macOS. |
Configurar e ligar
| Artigo | Description |
|---|---|
| Palavras-chave e atributos de DSN e de cadeias de ligação | O catálogo completo de palavras-chave de cadeia de ligação, entradas DSN e atributos SQLSetConnectAttr, com os valores aceites para cada um. |
| Palavras-chave de string de ligação e nomes de fontes de dados (Linux e macOS) | Como odbc.ini e odbcinst.ini definem uma DSN no Linux e no macOS, bem como as definições de TLS e de TCP keep-alive específicas dessas plataformas. |
| Administrador de Fonte de Dados ODBC DSN (Windows) | Todas as opções nas páginas do assistente DSN do Windows, para quando configuras uma fonte de dados através da interface em vez de uma cadeia de ligação. |
| Agrupamento de ligações com reconhecimento do controlador (Windows) | Que palavras‑chave e atributos da cadeia de ligação colocam uma ligação no seu próprio grupo, e quais implicam uma ida e volta adicional para a repor. |
Autenticar e proteger
| Artigo | Description |
|---|---|
| Utilizar o Microsoft Entra ID com o controlador ODBC | Cada Authentication valor de palavra-chave, desde identidade gerida e principal de serviço até interativo e integrado, com a configuração que cada um precisa. |
| Utilizar Always Encrypted com o controlador ODBC | Encripte colunas sensíveis no processo cliente para que o texto simples nunca chegue ao servidor, com o resumo da API do driver e as suas limitações documentadas. |
| Classificação dos dados | Leia as etiquetas de sensibilidade que o servidor atribui às colunas classificadas, para que a sua aplicação possa aplicar a sua própria política de proteção de dados. |
| Utilizar autenticação integrada (Linux e macOS) | Configure o Kerberos para que um cliente Linux ou macOS possa ligar-se com credenciais do Windows em vez de um login do SQL Server. |
Alta disponibilidade e resiliência
| Artigo | Description |
|---|---|
| Resiliência da ligação | Como ConnectRetryCount e ConnectRetryInterval restauram uma ligação quando o servidor a interrompe quando esta está inativa, e os erros IMCxx que o controlador devolve quando a recuperação não é possível. |
| Alta disponibilidade e recuperação de desastres | Liga-te através de um ouvinte de grupo de disponibilidade e usa MultiSubnetFailover para que o failover não fique bloqueado num timeout de subrede. |
| Utilizar resolução IP de rede transparente | Como a alternativa legada TransparentNetworkIPResolution ordena as tentativas de ligação entre vários endereços IP e por que motivo MultiSubnetFailover a substitui. |
Trabalhar com dados
| Artigo | Description |
|---|---|
| Tipo de dados vetoriais | Associar, enviar e recuperar o tipo vetor, incluindo a sua representação nativa em C e suporte para cópia em massa. |
| Usar transações XA com DTC | Inscreva o SQL Server numa transação distribuída através do Coordenador de Transações Distribuídas da Microsoft no Windows, Linux ou macOS. |
| Diretrizes de programação (Linux e macOS) | Que funcionalidades o controlador suporta no Linux e no macOS, quais não suporta e como o conjunto de caracteres e o tratamento do OpenSSL diferem do Windows. |
Diagnosticar e solucionar problemas
| Artigo | Description |
|---|---|
| Resolução de problemas de encriptação de ligação | Corrigir os erros de certificado e encriptação que a versão 18 revela porque ela encripta por defeito. |
| Rastreio de acesso a dados (Linux e macOS) | Ativa o rastreio de condutores e captura um ficheiro de registo quando precisares de ver as chamadas que a tua aplicação realmente faz. |
| Problemas conhecidos (Linux e macOS) | Defeitos confirmados e as suas soluções alternativas. Consulte aqui antes de submeter um pedido de suporte. |
| Perguntas frequentes (Linux e macOS) | Respostas curtas às perguntas que surgem mais frequentemente sobre o driver no Linux e macOS. |
Notas de lançamento e correções de bugs
| Artigo | Description |
|---|---|
| Notas de lançamento para Windows | Novas funcionalidades, alterações de comportamento e correções em cada versão do driver do Windows. |
| Notas de lançamento para Linux e macOS | Novas funcionalidades, alterações de comportamento e correções em cada lançamento de drivers para Linux e macOS. |
| Notas de atualização para as ferramentas do SQL Server | Alterações às utilidades sqlcmd e bcp , que se instalam separadamente do driver no Linux e macOS. |
Reference
| Artigo | Description |
|---|---|
| Controlador ODBC no Windows | Um resumo, versão por versão, do que é suportado pelo controlador no Windows e um índice dos artigos específicos do Windows. |
| Funcionalidades do driver ODBC no Windows | Qual das versões introduziu cada funcionalidade do Windows, além das alterações de comportamento associadas. |
Pedir uma funcionalidade
Para solicitar uma funcionalidade, submeta uma ideia através do feedback do SQL Server.
Conteúdo relacionado
- Referência do Programador ODBC: A especificação da API ODBC que este driver implementa, documentada separadamente do driver.
- Funcionalidades do SQL Server Native Client: Comportamento do driver documentado apenas no conteúdo do Native Client. Estes artigos aplicam-se ao Driver ODBC para SQL Server, exceto quando descrevem o OLE DB.
- Utilidade BCP: A utilidade de cópia em massa, instalada separadamente do driver.
- Utilidade sqlcmd: A utilidade de consulta na linha de comandos, instalada separadamente do driver.
- Matriz de suporte a funcionalidades do driver
- Blog de drivers do SQL Server