SlideShare una empresa de Scribd logo
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

PDF
Bases de Datos en Java - Intro a JDBC
PDF
Postgre sql y_replicacion_slony_p
DOCX
Lenguajes de programas
PDF
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
DOC
Replicacion con postgresql y slony
PDF
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
PPTX
Bases de Datos en Java - Intro a JDBC
Postgre sql y_replicacion_slony_p
Lenguajes de programas
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
Replicacion con postgresql y slony
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006

La actualidad más candente (17)

PDF
Curso Básico de JDBC
PDF
Introducción a PostgreSql
PPTX
Conexion bd en java y api necesaria
PDF
Servicios web java php-perl-google
PPTX
PDF
Charla OWASP
PPTX
PDF
PDF
Dba PostgreSQL desde básico a avanzado parte2
PDF
TALLER 2 COMANDOS PLSQL
PDF
Postgre sql
PPT
Java y Bases de Datos
PPTX
JDBC(conjunto de clases e interfaces)
PPT
Base de Datos por Gustavo V.M
Curso Básico de JDBC
Introducción a PostgreSql
Conexion bd en java y api necesaria
Servicios web java php-perl-google
Charla OWASP
Dba PostgreSQL desde básico a avanzado parte2
TALLER 2 COMANDOS PLSQL
Postgre sql
Java y Bases de Datos
JDBC(conjunto de clases e interfaces)
Base de Datos por Gustavo V.M
Publicidad

Similar a ODBC en C (20)

PPTX
Comparacion de Gestores de Base de Datos
PPTX
U7 postgre sql
PDF
El uso correcto de MySQLi
PDF
Sistemas de gestión de base de datos
PPT
Curso TIC de PHP y MSQL Parte 3
PPT
Curso TIC de PHP y MSQL Parte 1
PPTX
Dprn3 u3 a1_gorh
PPTX
Ds dprn3 u3_a1_alcz
ODP
Comparación de algunos SGBDR
PDF
Llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
DOCX
Qué es el odbc
PDF
Mysql posgresql
PPT
Curso TIC de PHP y MSQL
PPTX
Diferencias entre los SGBD´s
PPTX
Comparacion de SGBD
Comparacion de Gestores de Base de Datos
U7 postgre sql
El uso correcto de MySQLi
Sistemas de gestión de base de datos
Curso TIC de PHP y MSQL Parte 3
Curso TIC de PHP y MSQL Parte 1
Dprn3 u3 a1_gorh
Ds dprn3 u3_a1_alcz
Comparación de algunos SGBDR
Llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
Qué es el odbc
Mysql posgresql
Curso TIC de PHP y MSQL
Diferencias entre los SGBD´s
Comparacion de SGBD
Publicidad

Último (20)

PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
DOCX
Guía 5. Test de orientación Vocacional 2.docx
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PPTX
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
PPTX
Curso de generación de energía mediante sistemas solares
PDF
Distribucion de frecuencia exel (1).pdf
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PDF
Teoría de estadística descriptiva y aplicaciones .pdf
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PPT
Protocolos de seguridad y mecanismos encriptación
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
PPTX
modulo seguimiento 1 para iniciantes del
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Estrategia de Apoyo de Daylin Castaño (5).pdf
Guía 5. Test de orientación Vocacional 2.docx
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Historia Inteligencia Artificial Ana Romero.pptx
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
Curso de generación de energía mediante sistemas solares
Distribucion de frecuencia exel (1).pdf
capacitación de aire acondicionado Bgh r 410
la-historia-de-la-medicina Edna Silva.pptx
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
Teoría de estadística descriptiva y aplicaciones .pdf
Mecanismos-de-Propagacion de ondas electromagneticas
Protocolos de seguridad y mecanismos encriptación
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
modulo seguimiento 1 para iniciantes del

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