190 likes | 371 Views
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.
E N D
C/ODBC Ambientes de Desenvolvimento Avançados 4º Ano
Índice • O OBDC • Arquitectura ODBC • Estrutura de uma aplicação • API do ODBC Ambientes de Desenvolvimento Avançados C/OBDC
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 Ambientes de Desenvolvimento Avançados C/OBDC
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 Ambientes de Desenvolvimento Avançados C/OBDC
Aplicação Gestor de Drivers Driver Driver Driver Origem dos Dados Origem dos Dados Origem dos Dados Ambientes de Desenvolvimento Avançados C/OBDC
Estrutura de uma Aplicação • 1- Estabelecer a Conexão • SQLAllocHandle(...Ambiente...) • SQLAllocHandle(...Conexão...) • SQLConnect • 2- Inicializar • SQLGetInfo • SQLAllocHandle(...Comando...) • SQLSetStmtOption Ambientes de Desenvolvimento Avançados C/OBDC
Estrutura de uma Aplicação (continuação) • 3- Executar • SQLBindParameter • SQLExecute • 4a- Se for um SELECT - Recuperar os Resultados • SQLNumResultCols • SQLDescribeCol • SQLBindCol • SQLFetch • SQLGetData Ambientes de Desenvolvimento Avançados C/OBDC
Estrutura de uma Aplicação (continuação) • 4b-Se for um Update, Delete ou Insert • SQLRowCount • 5- Terminar a Transacção • SQLEndTran • 6- Desligar • SQLFreeHandle(...Comando...) • SQLDisconnect • SQLFreeHandle(...Conexão...) • SQLFreeHandle(...Ambiente...) Ambientes de Desenvolvimento Avançados C/OBDC
API do ODBC • Includes necessários • Estabelecer a Conexão e Inicializar • Executar um comando • Recuperar os resultados • Desligar Ambientes de Desenvolvimento Avançados C/OBDC
API do ODBCIncludes necessários #include <sql.h> #include <sqlext.h> #include <sqltypes.h> Ambientes de Desenvolvimento Avançados C/OBDC
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); Ambientes de Desenvolvimento Avançados C/OBDC
API do ODBCEstabelecer a Conexão e Inicializar SQLHENV hEnv=SQL_NULL_HANDLE; SQLHDBC hDBC=SQL_NULL_HANDLE; SQLRETURN RetCode=SQL_SUCCESS; // Alocar o Ambiente RetCode=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ão RetCode=SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC); // Ligar RetCode=SQLConnect(hDBC, (unsigned char*)”DSN_ISEP", SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS); Ambientes de Desenvolvimento Avançados C/OBDC
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); Ambientes de Desenvolvimento Avançados C/OBDC
API do ODBCExecutar um comando SQLHSTMT hStmtDelete; RetCode=SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmtDelete); // Ligar as variáveis da aplicação aos Parameter Markers RetCode=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ção RetCode=SQLEndTran(SQL_HANDLE_DBC, hDBC, SQL_COMMIT); Ambientes de Desenvolvimento Avançados C/OBDC
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); Ambientes de Desenvolvimento Avançados C/OBDC
API do ODBCRecuperar os Resultados // Alocar o comando RetCode=SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt); // Executar o Comando RetCode=SQLExecDirect(hStmt, (unsigned char*)”Select Nome from Pessoas”, SQL_NTS); // Ligar as colunas resultado com as variáveis da aplicação RetCode=SQLBindCol(hStmt, 1, SQL_CHAR, cNome, 50, &TamNome); RetCode=SQLFetch(hStmt); Ambientes de Desenvolvimento Avançados C/OBDC
API do ODBCDesligar SQLRETURN SQLFreeHandle( SQLSMALLINT HandleType, SQLHANDLE Handle); SQLRETURN SQLDisconnect( SQLHDBC ConnectionHandle); Ambientes de Desenvolvimento Avançados C/OBDC
API do ODBCDesligar // Libertar o handle de Comando SQLFreeHandle(SQL_HANDLE_STMT, hStmt); // Desligar da Base de Dados SQLDisconnect(hDBC); // Libertar o handle de Conexão SQLFreeHandle(SQL_HANDLE_DBC, hDBC); // Libertar o handle de Ambiente SQLFreeHandle(SQL_HANDLE_ENV, hEnv); Ambientes de Desenvolvimento Avançados C/OBDC
Fim Nuno Castro Ferreira nacf@dei.isep.ipp.pt