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_HOMEapontando para a pasta do Instant Client. - Se usar arquivos TNS, crie a variável
TNS_ADMINapontando para a pastanetwork\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
createStatementpode 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
.libpode variar conforme a versão do Instant Client (ex:oraocci21.libpara 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.
