C/ODBC
description
Transcript of C/ODBC
C/ODBC
Ambientes de Desenvolvimento Avançados
4º Ano
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 2
Índice
• O OBDC
• Arquitectura ODBC
• Estrutura de uma aplicação
• API do ODBC
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 3
O ODBC
• ODBC - Open DataBase Connectivity
• Permite o acesso a vários DBMS (DataBase Mamagement System) através de uma só API
• Isolado da aplicação e do DBMS
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 4
Arquitectura ODBC
• Aplicação– Executa processamento e chama o ODBC
• Gestor de Drivers– Passa as funções de ODBC para o driver
• Drivers– Processa as funções do ODBC
• Origem dos Dados– Dados a que pretendemos aceder
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 5
Origem dos Dados
Origem dos Dados
DriverDriver DriverDriver
Gestor de DriversGestor de Drivers
DriverDriver
Origem dos Dados
Origem dos Dados
Origem dos Dados
Origem dos Dados
AplicaçãoAplicação
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 6
Estrutura de uma Aplicação
1- Estabelecer a Conexão
• SQLAllocHandle(...Ambiente...)
• SQLAllocHandle(...Conexão...)
• SQLConnect
2- Inicializar
• SQLGetInfo
• SQLAllocHandle(...Comando...)
• SQLSetStmtOption
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 7
Estrutura de uma Aplicação (continuação)
3- Executar
• SQLBindParameter
• SQLExecute
4a- Se for um SELECT - Recuperar os Resultados
• SQLNumResultCols
• SQLDescribeCol
• SQLBindCol
•SQLFetch
•SQLGetData
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 8
4b-Se for um Update, Delete ou Insert
• SQLRowCount
5- Terminar a Transacção
• SQLEndTran
Estrutura de uma Aplicação (continuação)
6- Desligar
• SQLFreeHandle(...Comando...)
• SQLDisconnect
• SQLFreeHandle(...Conexão...)
• SQLFreeHandle(...Ambiente...)
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 9
API do ODBC
• Includes necessários
• Estabelecer a Conexão e Inicializar
• Executar um comando
• Recuperar os resultados
• Desligar
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 10
API do ODBCIncludes necessários
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 11
API do ODBCEstabelecer a Conexão e Inicializar
SQLRETURN SQLAllocHandle(SQLSMALLINT HandleType,SQLHANDLE InputHandle,SQLHANDLE * OutputHandlePtr);
SQLRETURN SQLConnect( SQLHDBC ConnectionHandle, SQLCHAR * ServerName, SQLSMALLINT NameLength1, SQLCHAR * UserName, SQLSMALLINT NameLength2, SQLCHAR * Authentication, SQLSMALLINT NameLength3);
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 12
API do ODBCEstabelecer a Conexão e Inicializar
SQLHENV hEnv=SQL_NULL_HANDLE;SQLHDBC hDBC=SQL_NULL_HANDLE;SQLRETURN RetCode=SQL_SUCCESS;
// Alocar o AmbienteRetCode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
/* Indicar qual a versão do ODBC que vai ser usada */RetCode=SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
// Alocar a ConexãoRetCode=SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC);
// LigarRetCode=SQLConnect(hDBC, (unsigned char*)”DSN_ISEP", SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS);
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 13
API do ODBCExecutar um comando
SQLRETURN SQLPrepare( SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength);
SQLRETURN SQLExecute( SQLHSTMT StatementHandle);
SQLRETURN SQLExecDirect( SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength);
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 14
API do ODBCExecutar um comando
SQLHSTMT hStmtDelete;
RetCode=SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmtDelete);
// Ligar as variáveis da aplicação aos Parameter MarkersRetCode=SQLBindParameter(hStmtDelete, 1, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &iProduto, sizeof(int), &TamProduto);
RetCode=SQLPrepare(hStmtDelete, (unsigned char*)"DELETE FROM PRODUTOS WHERE ProdutoID = ?", SQL_NTS);
RetCode=SQLExecute(hStmtDelete);
// Fazer o Commit da transacçãoRetCode=SQLEndTran(SQL_HANDLE_DBC, hDBC, SQL_COMMIT);
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 15
API do ODBCRecuperar os Resultados
SQLRETURN SQLBindCol( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLINTEGER BufferLength, SQLLEN * StrLen_or_Ind);
SQLRETURN SQLFetch( SQLHSTMT StatementHandle);
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 16
API do ODBCRecuperar os Resultados
// Alocar o comandoRetCode=SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt);
// Executar o ComandoRetCode=SQLExecDirect(hStmt, (unsigned char*)”Select Nome from Pessoas”, SQL_NTS);
// Ligar as colunas resultado com as variáveis da aplicaçãoRetCode=SQLBindCol(hStmt, 1, SQL_CHAR, cNome, 50, &TamNome);
RetCode=SQLFetch(hStmt);
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 17
API do ODBCDesligar
SQLRETURN SQLFreeHandle( SQLSMALLINT HandleType, SQLHANDLE Handle);
SQLRETURN SQLDisconnect( SQLHDBC ConnectionHandle);
08/10/2001 Ambientes de Desenvolvimento AvançadosC/OBDC
Página 18
API do ODBCDesligar
// Libertar o handle de ComandoSQLFreeHandle(SQL_HANDLE_STMT, hStmt);
// Desligar da Base de DadosSQLDisconnect(hDBC);
// Libertar o handle de ConexãoSQLFreeHandle(SQL_HANDLE_DBC, hDBC);
// Libertar o handle de AmbienteSQLFreeHandle(SQL_HANDLE_ENV, hEnv);