C/ODBC

19
C/ODBC Ambientes de Desenvolvimento Avançados 4º Ano

description

C/ODBC. Ambientes de Desenvolvimento Avançados 4º Ano. Índice. O OBDC Arquitectura ODBC Estrutura de uma aplicação API do ODBC. 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. - PowerPoint PPT Presentation

Transcript of C/ODBC

Page 1: C/ODBC

C/ODBC

Ambientes de Desenvolvimento Avançados

4º Ano

Page 2: C/ODBC

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

Page 3: C/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

Page 4: C/ODBC

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

Page 5: C/ODBC

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

Page 6: C/ODBC

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

Page 7: C/ODBC

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

Page 8: C/ODBC

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...)

Page 9: C/ODBC

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

Page 10: C/ODBC

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>

Page 11: C/ODBC

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);

Page 12: C/ODBC

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);

Page 13: C/ODBC

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);

Page 14: C/ODBC

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);

Page 15: C/ODBC

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);

Page 16: C/ODBC

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);

Page 17: C/ODBC

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);

Page 18: C/ODBC

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);

Page 19: C/ODBC

Fim

Nuno Castro Ferreira

[email protected]