SQL Server

Como conectar uma aplicação C++ ao SQL Server usando o Visual Studio e ODBC, método padrão e recomendado pela Microsoft para aplicações C++ nativas.

1. Pré-requisitos

  • Visual Studio instalado (2017, 2019 ou 2022).
  • SQL Server instalado e em execução (pode ser LocalDB, Express, Developer, ou Azure SQL).
  • ODBC Driver para SQL Server instalado (ex: “ODBC Driver 17 for SQL Server”).
  • Dados de acesso ao banco (servidor, usuário, senha, nome da base de dados).

2. Configuração do Projeto no Visual Studio

  1. Crie um novo projeto C++ Console Application.
  2. No menu do projeto, vá em:
    Propriedades > Linker > Input > Additional Dependencies
    Adicione: odbc32.lib
  3. Certifique-se de que o driver ODBC está instalado no Windows.

3. Exemplo de Código para Conexão com SQL Server via ODBC

#include <windows.h>
#include <sqlext.h>
#include <iostream>

int main() {
SQLHENV hEnv = NULL;
SQLHDBC hDbc = NULL;
SQLRETURN ret; // Para verificar retornos das funções ODBC

// 1. Alocar ambiente ODBC
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

// 2. Alocar conexão
ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);

// 3. String de conexão (ajuste conforme seu ambiente)
SQLCHAR connStr[] = "Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=NomeDaseDados;Uid=Utilizador;Pwd=Senha;";
SQLCHAR outstr[1024];
SQLSMALLINT outstrlen;

// 4. Conectar
ret = SQLDriverConnect(
hDbc, NULL, connStr, SQL_NTS,
outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT
);

if (SQL_SUCCEEDED(ret)) {
std::cout << "Conexão estabelecida com sucesso!" << std::endl;

// Exemplo: executar uma consulta simples
SQLHSTMT hStmt;
ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
ret = SQLExecDirect(hStmt, (SQLCHAR*)"SELECT GETDATE()", SQL_NTS);

if (SQL_SUCCEEDED(ret)) {
SQLCHAR buffer[64];
while (SQLFetch(hStmt) == SQL_SUCCESS) {
SQLGetData(hStmt, 1, SQL_C_CHAR, buffer, sizeof(buffer), NULL);
std::cout << "Data/hora do servidor: " << buffer << std::endl;
}
}
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
} else {
std::cout << "Falha na conexão." << std::endl;
}

// 5. Limpeza
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 0;
}

Observações:

  • Substitua localhost, NomeBaseDados, Utilizador, Senha conforme seu ambiente.
  • O driver pode ser "ODBC Driver 17 for SQL Server" ou "ODBC Driver 13 for SQL Server", conforme o instalado.

4. Dicas Importantes

  • O Visual Studio já inclui o cabeçalho sqlext.h e a biblioteca odbc32.lib.
  • Para bases de dados locais, use Server=localhost ou (localdb)\\MSSQLLocalDB na string de conexão.
  • Para Azure SQL, use a string de conexão fornecida no portal do Azure.
  • Sempre verifique os retornos das funções ODBC para tratamento de erros.

5. Recursos Adicionais

  • Pode criar e testar a string de conexão usando o Data Sources (ODBC) no Painel de Controle do Windows.
  • Para manipular dados (SELECT, INSERT, UPDATE, DELETE), utilize os comandos SQL nas funções SQLExecDirect ou SQLPrepare + SQLExecute.