SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente (17)

S8-BDD
S8-BDDS8-BDD
S8-BDD
 
Coneccion
ConeccionConeccion
Coneccion
 
Curso Básico de JDBC
Curso Básico de JDBCCurso Básico de JDBC
Curso Básico de JDBC
 
Introducción a PostgreSql
Introducción a PostgreSqlIntroducción a PostgreSql
Introducción a PostgreSql
 
Conexion bd en java y api necesaria
Conexion bd en java y api necesariaConexion bd en java y api necesaria
Conexion bd en java y api necesaria
 
Servicios web java php-perl-google
Servicios web java php-perl-googleServicios web java php-perl-google
Servicios web java php-perl-google
 
JDBC
JDBCJDBC
JDBC
 
Charla OWASP
Charla OWASPCharla OWASP
Charla OWASP
 
Jdbc
JdbcJdbc
Jdbc
 
Postgre
PostgrePostgre
Postgre
 
Jdbc
JdbcJdbc
Jdbc
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
 
TALLER 2 COMANDOS PLSQL
TALLER 2 COMANDOS PLSQLTALLER 2 COMANDOS PLSQL
TALLER 2 COMANDOS PLSQL
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
Java y Bases de Datos
Java y Bases de DatosJava y Bases de Datos
Java y Bases de Datos
 
JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)
 
Base de Datos por Gustavo V.M
Base de Datos por Gustavo V.MBase de Datos por Gustavo V.M
Base de Datos por Gustavo V.M
 

Similar a ODBC en C (20)

Odbc
OdbcOdbc
Odbc
 
Clase conexion java - Analisis de Sistemas
Clase conexion java - Analisis de SistemasClase conexion java - Analisis de Sistemas
Clase conexion java - Analisis de Sistemas
 
Conexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBCConexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBC
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc diapositivva
Jdbc diapositivvaJdbc diapositivva
Jdbc diapositivva
 
Java y Bases Datos
Java y Bases DatosJava y Bases Datos
Java y Bases Datos
 
Bases Datos en java
Bases Datos en javaBases Datos en java
Bases Datos en java
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
11.android bases de datos
11.android   bases de datos11.android   bases de datos
11.android bases de datos
 
Bases de Datos en en www.fiec.espol.edu.ec
Bases de Datos en  en www.fiec.espol.edu.ecBases de Datos en  en www.fiec.espol.edu.ec
Bases de Datos en en www.fiec.espol.edu.ec
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
JDBC
JDBCJDBC
JDBC
 
Jdbc
JdbcJdbc
Jdbc
 
Ado.Net
Ado.NetAdo.Net
Ado.Net
 
U7 postgre sql
U7 postgre sqlU7 postgre sql
U7 postgre sql
 
Especialista Web J5
Especialista Web   J5Especialista Web   J5
Especialista Web J5
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 

Último (15)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 

ODBC en C

  • 1. ODBC en C Ram´n Antonio Parada o 8 de Abril de 2010
  • 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. 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. ODBC en C Qu´ es ODBC? e Comunicaci´n o
  • 5. ODBC en C Qu´ es ODBC? e Comunicaci´n o
  • 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. 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. 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. ODBC en C Instalaci´n y configuraci´n o o Configuraci´n Windows o Configuraci´n Windows o
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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