• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
ODBC en C
 

ODBC en C

on

  • 1,575 views

ODBC en C

ODBC en C

Statistics

Views

Total Views
1,575
Views on SlideShare
1,574
Embed Views
1

Actions

Likes
0
Downloads
6
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    ODBC en C ODBC en C Presentation Transcript

    • ODBC en C Ram´n Antonio Parada o 8 de Abril de 2010
    • 1 Qu´ es ODBC? e Implementaciones Drivers 2 Instalaci´n y configuraci´n o o Configuraci´n Windows o Configuraci´n Mac OS o Configuraci´n Linux o 3 Uso de la API en C Conexi´n o Consultas con bind Consultas preparadas Transacciones Otras funciones
    • ODBC en C Qu´ es ODBC? e Qu´ es ODBC? e ODBC = Open Database Connectivity Es una interfaz de acceso a datos DBMS Relacionales y no-relacionales Basado en la especificaci´n ISO Call Level Interface (CLI) del SQL Access o Group. CLI define como deben enviarse las consultas al DBMS y como devolver los recordsets (db2cli, ODBC) Historia 1992 - SQL Access Group comienza sus trabajos 1993 - 1.0 Microsoft lanza su implementaci´n o 1995 - 3.0 Grandes cambios API 1997 - 3.5 Unicode
    • ODBC en C Qu´ es ODBC? e Comunicaci´n o
    • ODBC en C Qu´ es ODBC? e Comunicaci´n o
    • ODBC en C Qu´ es ODBC? e Implementaciones Linux iODBC librerias: libiodbc2 libiodbc2-dev entorno GTK+ Compilar: gcc -l iodbc UnixODBC librerias: unixodbc unixodbc-dev Compilar: gcc -l odbc Entorno QT iODBC no inclu´ soporte ODBC 3 a ODBC 2.x y 3.x Ejecuci´ compatibles / Compilaci´n incompatibles ıon o Interfaz de configuraci´n o
    • ODBC en C Qu´ es ODBC? e Drivers Linux MySQL ODBC driver (MyODBC) Librer´ mysqlclient ıa: Protocolo: MySQL ClientServer Protocol apt-get install libmyodbc ODBC driver for PostgreSQL odbc-postgresql Oracle ODBC Driver Libreria: Oracle Call Interface Protocolo: SQL*Net Librer´ nativas ıas
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Windows o Configuraci´n Windows o Inicio > Configuraci´n > Panel de control > Fuentes de datos ODBC 32 bits o
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Windows o Configuraci´n Windows o
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Mac OS o Configuraci´n Mac OS o Hard Disk > Applications > Utilities > ODBC Administrator
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Linux o Configuraci´n Linux o Opciones de configuraci´n: o $ODBCINI - Variable de entorno /.odbc.ini - Directorio personal /etc/odbc.ini - A nivel de sistema Herramientas de configuraci´n: o Herramienta gr´fica ODBCConfig a odbcinst Ficheros de configuraci´n o
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Linux o Drivers /etc/odbcinst.ini [mysql_driver] Description = Mysql Connector Driver= /usr/lib/odbc/libmyodbc.so UsageCount = 1 CPTimeout = CPReuse = [oracle_driver] Description = Oracle express driver Driver = /usr/lib/oracle/libsqora.so
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Linux o Data Sources /etc/odbc.ini [mysql_dsn] Driver = mysql_driver Description = Mi base Mysql SERVER = localhost USER = user_database Password = passwd_database Database = database_name OPTION = 3 [oracle_dsn] Driver = oracle_driver ServerPort = localhost:1521 TargetDSN = mydatabase LoginUser = userID LoginAuth = password
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Linux o Pooling /etc/odbcinst.ini [ODBC] Trace = Yes Trace File = /tmp/sql.log Pooling = Yes # Activar pooling [mysql_driver_p] Description = Mysql Connector Driver= /usr/lib/odbc/libmyodbc.so UsageCount = 1 CPReuse = DontDLClose = 1 CPTimeout = 120 # Permanencia conexi´n o Pooling a nivel de driver
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Linux o Trace /etc/odbcinst.ini [ODBC] Trace = Yes Trace File = /tmp/sql.log Pooling = Yes # Activar pooling [mysql_driver_p] Description = Mysql Connector Driver= /usr/lib/odbc/libmyodbc.so UsageCount = 1 CPReuse = DontDLClose = 1 CPTimeout = 120 # Permanencia conexi´n o MSQRY32 ba:c0 ENTER SQLPrepare HSTMT 0x0082fc08 UCHAR * 0x00085bc8 [ 59] "SELECT TABLA1.COL1 FROM PRUEBA1.TABLA1 TABLA1" SDWORD 59
    • ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Linux o Verificar Verificar $ odbcinst -q -s [mysql_dsn] $ odbcinst -q -d [mysql_driver] $ isql mysql_dsn Connected! SQL>
    • ODBC en C Uso de la API en C Conexi´n o Conexi´n o ejemplo conexion.c #include <stdio.h> #include <sql.h> #include <sqlext.h> int main() { SQLHENV env; // entorno SQLHDBC dbc; // conexion //SQLHSTMT stmt; //statement SQLRETURN ret; // respuesta SQLAllocHandle(SQL HANDLE ENV, SQL NULL HANDLE, &env); SQLSetEnvAttr(env, SQL ATTR ODBC VERSION, (void *) SQL_OV_ODBC3, 0); SQLAllocHandle(SQL HANDLE DBC, env, &dbc); // connecta al data source (DSN) ret = SQLDriverConnect(dbc, NULL, "DSN=mysql dsn;", SQL NTS, NULL, 0, NULL, SQL DRIVER COMPLETE); if (SQL SUCCEEDED(ret)) { printf("SI conectadon"); } else { printf("NO conectadon"); } return 1; }
    • ODBC en C Uso de la API en C Conexi´n o Conexi´n o SQLAllocHandle SQLRETURN SQLAllocHandle( SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE * OutputHandlePtr); HandleType puede ser: SQL HANDLE ENV - environment handle SQL HANDLE DBC - connection handle SQL HANDLE STMT - statement handle SQL HANDLE DESC - descriptor handle
    • ODBC en C Uso de la API en C Conexi´n o Sintaxis SQLRETURN SQLExecDirect( SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength); Ejemplo SQLExecDirect SQLExecDirect(stmt, "select * from mytable", SQL NTS); SQLExecDirect = SQLPrepare + SQLExecute
    • ODBC en C Uso de la API en C Consultas con bind Consultas con bind ejemplo con bind.c SQLINTEGER clave; SQLCHAR nombre[256]; SQLINTEGER signal; // Enlazamos variables a columnas SQLBindCol(stmt, 1, SQL_C_SLONG, &clave, sizeof(clave), &signal) SQLBindCol(stmt, 2, SQL_C_CHAR, &nombre, 256, &signal) // Ejecutamos la sentencia ret = SQLExecDirect(stmt, "SELECT clave, nombre FROM empleados;", SQL_NTS); while (SQL_SUCCEEDED(ret = SQLFetch(stmt))) { ... } SQLCloseCursor(stmt); Enlazamos elementos de cada columna con variables del mismo tipo
    • ODBC en C Uso de la API en C Consultas con bind Tipos de datos SQL type identifier C type native SQL specification SQL CHAR SQL C CHAR[n+1] CHAR SQL DECIMAL (?) DECIMAL(p,s) SQL INTEGER SQL C SLONG / long INTEGER SQL FLOAT float o double FLOAT(p) SQL DOUBLE SQL C DOUBLE / double DOUBLE PRECISION SQL VARCHAR SQL C VARCHAR VARCHAR
    • ODBC en C Uso de la API en C Consultas con bind Consultas sin bind ejemplo sin bind.c long tipocol, numcols; SQLExecDirect(stmt, "select * from mytable;", SQL NTS); SQLNumResultCols(stmt, &numcols); while (SQL_SUCCEEDED(ret = SQLFetch(stmt))) { SQLColAttribute (stmt, numcols, SQL DESC CONCISE TYPE, SQL NULL, 0, SQL NULL, &tipocol); //Obtenemos variables sin binding SQLGetData(stmt, 1, tipocol, &col, sizeof(col), &signal); }
    • ODBC en C Uso de la API en C Consultas preparadas Consultas preparadas Preparadas: SQLPrepare y SQLExecute UCHAR nombre cbnombre = SQL_NTS; //null terminated string SQLPrepare(stmt, " INSERT INTO empleados (id, nombre) VALUES (NULL, ?)", SQL_NTS); ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, LENGTH, 0, lname, 0, &cbnombre); strcpy(nombre, "Nombre1"); ret = SQLExecute(stmt); strcpy(nombre, "Nombre2"); ret = SQLExecute(stmt); Genera procedimientos almacenados temporales
    • ODBC en C Uso de la API en C Transacciones Transacciones The following shows how to turn auto-commit off: SQLTransact SQLSetConnectOption(hdbc, SQL AUTOCOMMIT, SQL AUTOCOMMIT OFF); ... if (ilikeit()) SQLTransact(env, dbc, SQL_COMMIT); else SQLTransact(env, dbc, SQL ROLLBACK);
    • ODBC en C Uso de la API en C Otras funciones M´s funciones a SQLGetDiagRec - Diagnostico (errores) SQLRowCount - N´mero de columnas afectadas por SELECT, UPDATE o u DELETE SQLTables - Tablas y vista SQLColumns - Nombres de columnas SQLProcedures - Procedimientos almacenados Funciones entorno SQLDrivers - Drivers disponibles SQLDataSources - Data Sources disponibles
    • ODBC en C Uso de la API en C Otras funciones Desconexi´n o ejemplo conexion.c SQLFreeStmt(stmt, SQL_CLOSE); // statement handle SQLDisconnect(dbc); // desconectar db SQLFreeConnect(dbc); // connection handle SQLFreeEnv(env); // environment handle