Oracle

Como conectar uma aplicação C++ a uma base de dados Oracle usando o Visual Studio e o Oracle Instant Client com OCCI (Oracle C++ Call Interface).

1. Pré-requisitos

  • Oracle Instant Client (incluindo o SDK) baixado do site oficial da Oracle.
  • Visual Studio instalado (2017, 2019 ou 2022).
  • Variáveis de ambiente configuradas: PATH, ORACLE_HOME, TNS_ADMIN (se usar arquivos de configuração).
  • Acesso ao servidor Oracle (host, porta, service name ou TNS).

2. Instalação e Configuração

Passo 1: Descaregue e extraia o Oracle Instant Client

  • Baixe o pacote Basic e o SDK do Oracle Instant Client.
  • Extraia ambos para a mesma pasta, por exemplo:
    C:\Oracle\instantclient_19_8

Passo 2: Configure variáveis de ambiente

  • Adicione o caminho do Instant Client à variável PATH.
  • Crie a variável ORACLE_HOME apontando para a pasta do Instant Client.
  • Se usar arquivos TNS, crie a variável TNS_ADMIN apontando para a pasta network\admin.

Passo 3: Configure o projeto no Visual Studio

  • Inclua os diretórios de cabeçalhos:
    Propriedades do Projeto > C/C++ > Geral > Diretórios de Inclusão Adicionais
    Adicione: C:\Oracle\instantclient_19_8\sdk\include
  • Inclua os diretórios de bibliotecas:
    Propriedades do Projeto > Linker > Geral > Diretórios de Biblioteca Adicionais
    Adicione: C:\Oracle\instantclient_19_8\sdk\lib\msvc C:\Oracle\instantclient_19_8
  • Adicione dependências:
    Propriedades do Projeto > Linker > Entrada > Dependências Adicionais
    Adicione: oraocci19.lib oci.lib
  • Copie as DLLs necessárias (oci.dll, oraocci19.dll, etc.) para a pasta do executável.

3. Exemplo de Código para Conexão

#include <iostream>
#include <occi.h>

using namespace oracle::occi;
using namespace std;

int main() {
Environment* env = nullptr;
Connection* conn = nullptr;

try {
env = Environment::createEnvironment(Environment::DEFAULT);

// Substitua pelos seus dados
string user = "utilizador";
string pass = "senha";
string connectString = "host:porta/servicename"; // Exemplo: "localhost:1521/XEPDB1"

conn = env->createConnection(user, pass, connectString);

if (conn) {
cout << "Conexão estabelecida com sucesso!" << endl;

// Exemplo de consulta
Statement* stmt = conn->createStatement("SELECT SYSDATE FROM dual");
ResultSet* rs = stmt->executeQuery();

while (rs->next()) {
cout << "Data/hora do servidor Oracle: " << rs->getString(1) << endl;
}

stmt->closeResultSet(rs);
conn->terminateStatement(stmt);
} else {
cout << "Falha na conexão." << endl;
}

env->terminateConnection(conn);
Environment::terminateEnvironment(env);
}
catch (SQLException& e) {
cout << "Erro: " << e.what() << endl;
if (env && conn) {
env->terminateConnection(conn);
}
if (env) {
Environment::terminateEnvironment(env);
}
return 1;
}

return 0;
}
  • Substitua "utilizador", "senha" e "host:porta/servicename" pelos dados do seu ambiente Oracle.
  • O método createStatement pode ser usado para executar comandos SQL.

4. Observações

  • Certifique-se de que as DLLs do Instant Client estejam acessíveis (no PATH ou na pasta do executável).
  • O nome do arquivo .lib pode variar conforme a versão do Instant Client (ex: oraocci21.lib para Oracle 21c).
  • Para ambientes cloud, o connect string pode usar o formato TNS ou EZConnect, conforme documentação Oracle.
  • O exemplo acima utiliza OCCI, a API C++ oficial da Oracle para acesso à base de dados.