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
    Confi...
ODBC en C
  Qu´ es ODBC?
    e




Qu´ es ODBC?
  e

            ODBC = Open Database Connectivity
            Es una inte...
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-de...
ODBC en C
  Qu´ es ODBC?
    e
     Drivers


Linux



               MySQL ODBC driver (MyODBC)
               Librer´ my...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Windows
               o


Configuraci...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Windows
               o


Configuraci...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Mac OS
               o


Configuraci´...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Linux
               o


Configuraci´n...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Linux
               o


Drivers

   ...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Linux
               o


Data Sources...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Linux
               o


Pooling

   ...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Linux
               o


Trace

     ...
ODBC en C
  Instalaci´n y configuraci´n
           o              o
     Configuraci´n Linux
               o


Verificar

  ...
ODBC en C
  Uso de la API en C
     Conexi´n
           o


Conexi´n
      o

      ejemplo conexion.c

      #include <st...
ODBC en C
  Uso de la API en C
     Conexi´n
           o


Conexi´n
      o

      SQLAllocHandle

      SQLRETURN SQLAll...
ODBC en C
  Uso de la API en C
     Conexi´n
           o



      Sintaxis

        SQLRETURN SQLExecDirect(
            ...
ODBC en C
  Uso de la API en C
     Consultas con bind


Consultas con bind

      ejemplo con bind.c

        SQLINTEGER ...
ODBC en C
  Uso de la API en C
     Consultas con bind


Tipos de datos

            SQL   type identifier   C type        ...
ODBC en C
  Uso de la API en C
     Consultas con bind


Consultas sin bind

      ejemplo sin bind.c

          long tipo...
ODBC en C
  Uso de la API en C
     Consultas preparadas


Consultas preparadas

      Preparadas: SQLPrepare y SQLExecute...
ODBC en C
  Uso de la API en C
     Transacciones


Transacciones

      The following shows how to turn auto-commit off:

...
ODBC en C
  Uso de la API en C
     Otras funciones



      M´s funciones
       a

              SQLGetDiagRec - Diagnos...
ODBC en C
  Uso de la API en C
     Otras funciones


Desconexi´n
         o

      ejemplo conexion.c


      SQLFreeStmt...
Upcoming SlideShare
Loading in …5
×

ODBC en C

1,584 views

Published on

ODBC en C

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,584
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

ODBC en C

  1. 1. ODBC en C Ram´n Antonio Parada o 8 de Abril de 2010
  2. 2. 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
  3. 3. 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
  4. 4. ODBC en C Qu´ es ODBC? e Comunicaci´n o
  5. 5. ODBC en C Qu´ es ODBC? e Comunicaci´n o
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Windows o Configuraci´n Windows o
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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>
  17. 17. 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; }
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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); }
  23. 23. 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
  24. 24. 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);
  25. 25. 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
  26. 26. 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

×