Guía rápida de iniciación de DB2 Data Links Manager

Apéndice B. Ejemplo de CLI

A continuación se muestra un ejemplo de un programa CLI de DB2 diseñado para:

Este programa se puede ejecutar en AIX, Solaris o Windows NT. La sintaxis y la salida específica de Windows NT se indica con comentarios parecidos al siguiente:

/* 
   ******************
	En Windows NT ...
 
   ******************
*/
/******************************************************************************
**
** Nombre archivo fuente = datalink.c
**
** Material bajo licencia - Propiedad de IBM
** 
** (C) COPYRIGHT International Business Machines Corp. 1998
** Todos los derechos reservados.
** 
** Nota a los usuarios de los EE.UU. - El uso, duplicación o distribución
** están restringidos por el contrato GSA ADP Schedule con IBM Corp.
** 
**    OBJETIVO:
**  Versión modificada del ejemplo de CLI clisampl.c para demostrar la
**  creación y análisis
** 
**  Se llevan a cabo las siguientes operaciones:
**       - Conexión con una base de datos.
**       - Creación de una tabla con una sola fila datalink
**       - Inserción de una sola fila mediante SQLBuildDataLink() y
**         SQLBindParameter()
**       - Búsqueda y carga de información de análisis de datos de
**         la fila datalink recuperada mediante SQLGetDataLinkAttr()
**       - Eliminación de la tabla
**       - Desconexión de la base de datos.
** 
******************************************************************************/   
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlcli1.h>
#include "samputil.h"          /* Archivo de cabecera para el código de
                                                         ejemplo de CLI */
/*  
 * Variables globales para id de usuario y contraseña.
 * Es para mantener la simplicidad de los ejemplos; no es una práctica recomendada.
 */ 
extern SQLCHAR server[SQL_MAX_DSN_LENGTH + 1] ;
extern SQLCHAR uid[MAX_UID_LENGTH + 1] ;
extern SQLCHAR pwd[MAX_PWD_LENGTH + 1] ;
 
void getattr(
          SQLHSTMT hStmt,
          SQLSMALLINT AttrType,
          SQLCHAR* DataLink,
          SQLCHAR* Attribute,
          SQLINTEGER BufferLength )
{
     SQLINTEGER  StringLength ;
     SQLRETURN   rc ;
 
rc = SQLGetDataLinkAttr(
                hStmt,
                AttrType,
                DataLink,
                strlen( (char *)DataLink),
                Attribute,
                BufferLength,
                &StringLength
              ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hStmt, rc ) ;
 
printf("Attribute #%d) <%s>\n", AttrType, Attribute) ;
return ;
}   
 
int main(int argc, char * argv[] ) {
 
      SQLHANDLE henv, hdbc, hstmt ;
      SQLRETURN rc ;
 
      SQLCHAR szCreate[] = "CREATE TABLE DL_SAMPL "
                            "( "
                            "DL1 DATALINK "
                              "LINKTYPE URL "
                              "FILE LINK CONTROL "
                              "INTEGRITY ALL "
                              "READ PERMISSION DB "
                              "WRITE PERMISSION BLOCKED "
                              "RECOVERY NO "
                              "ON UNLINK RESTORE "
                            ")";       
 
SQLCHAR szInsert[]= "INSERT INTO DL_SAMPL VALUES (?)" ;
 
SQLCHAR szFileLink[] = "http://mycomputer.company.com/nfsdlink/userid/test_1.jpg"
/*
   *****************************************************************
   En Windows NT, sustituya "http://...jpg" por:
   "unc:\\mycomputer.company.com\nfsdlink\userid\test_1.jpg" ;
   *****************************************************************
*/
SQLCHAR szComment[] = "My First Datalink" ;
 
SQLCHAR szSelect[]= "SELECT * FROM DL_SAMPL" ;
SQLCHAR szDrop[] = "DROP TABLE DL_SAMPL" ;
SQLCHAR szDLCol[254] ;
SQLCHAR szBuffer[254] ;
SQLSMALLINT cCol ;
SQLCHAR szColName[33] ;
SQLSMALLINT fSqlType ;
SQLUINTEGER cbColDef ;
SQLSMALLINT ibScale ;
SQLSMALLINT fNullable ;
SQLINTEGER  siLength= SQL_NTS ;
 
/* macro para inicializar el servidor, uid y pwd */
INIT_UID_PWD ;
 
/* asignar un handle de entorno */
rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) ;
if ( rc != SQL_SUCCESS ) return(terminate( henv, rc ) ) ;
 
/* asignar un handle de conexión y conectar */
rc = DBconnect( henv, &hdbc ) ;
if ( rc != SQL_SUCCESS ) return( terminate( henv, rc ) ) ;
 
rc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc );
 
/*      
* Crear la tabla de ejemplo. En este código se da por supuesto
* que la tabla DL_SAMPL no existe.
*/       
 
printf( "Crear tabla - %s\n", szCreate ) ;
rc = SQLExecDirect( hstmt, szCreate, SQL_NTS ) ;
CHECK_HANDLE(SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Comprometer los cambios.  */
rc = SQLEndTran( SQL_HANDLE_DBC, hdbc, SQL_COMMIT ) ;
CHECK_HANDLE(SQL_HANDLE_DBC, hdbc, rc ) ;
 
/*  Preparar una sentencia insert. */
printf( "Insertar - %s\n", szInsert ) ;
rc = SQLPrepare( hstmt, szInsert, SQL_NTS ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/* Crear Datalink */
rc = SQLBuildDataLink( hstmt,
               (SQLCHAR *)"URL",
               strlen("URL"),
               szFileLink,
               strlen((char*)szFileLink),
               szComment,
               strlen((char *)szComment),
               szDLCol,
               sizeof(szDLCol),
               &siLength
             );
 
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Definir parámetro de entrada.  */
rc = SQLBindParameter(
               hstmt,
               1,
               SQL_PARAM_INPUT,
               SQL_C_DATALINK,
               SQL_DATALINK,
               sizeof(szDLCol),
               0,
               (SQLPOINTER)szDLCol,
               sizeof(szDLCol),
               NULL
             ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Insertar fila en la base de datos.  */
rc = SQLExecute( hstmt) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Comprometer los cambios.  */
rc = SQLEndTran( SQL_HANDLE_DBC, hdbc, SQL_COMMIT) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
 
/*  Restaurar parámetro de entrada.  */
rc = SQLFreeStmt( hstmt, SQL_RESET_PARAMS ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Ejecutar la sentencia select.  */
printf( "Seleccionar - %s\n", szSelect ) ;
rc= SQLExecDirect( hstmt, szSelect, SQL_NTS ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Devolver el número de columnas y describir el grupo de resultados. */
rc = SQLNumResultCols( hstmt, &cCol ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
printf( "Número de columnas - %d\n", cCol ) ;
rc = SQLDescribeCol(hstmt,
              1,
              szColName,
              sizeof( szColName ),
              NULL,
              &fSqlType,
              &cbColDef,
              &ibScale,
              &fNullable
            ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
printf( "Nombre columna - %s\n", szColName ) ;
printf( "Tipo columna - %d\n", fSqlType ) ;
printf( "Precisión columna - %ld\n", cbColDef) ;
printf( "Escala columna - %d\n", ibScale ) ;
printf( "Columna anulable - %s\n", ( fNullable ) ? "TRUE" : "FALSE" ) ;
 
/*  Vincular el parámetro de salida.  */
rc = SQLBindCol( hstmt, 1, SQL_C_DATALINK, szDLCol, sizeof(szDLCol), NULL ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Buscar y cargar datos.  */
rc = SQLFetch( hstmt ) ;
CHECK_HANDLE(SQL_HANDLE_STMT, hstmt, rc ) ;
 
printf( "Valor columna - %s\n", szDLCol ) ;
 
getattr(hstmt, 1, szDLCol, szBuffer, sizeof(szBuffer) );
getattr(hstmt, 2, szDLCol, szBuffer, sizeof(szBuffer) );
getattr(hstmt, 3, szDLCol, szBuffer, sizeof(szBuffer) );
getattr(hstmt, 4, szDLCol, szBuffer, sizeof(szBuffer) );
getattr(hstmt, 5, szDLCol, szBuffer, sizeof(szBuffer) );
getattr(hstmt, 6, szDLCol, szBuffer, sizeof(szBuffer) );
getattr(hstmt, 7, szDLCol, szBuffer, sizeof(szBuffer) );
 
/*  Cerrar cursor y liberar columnas vinculadas.  */
 
/*  Liberar recursos de sentencia */
 
rc = SQLFreeStmt(hstmt, SQL_UNBIND ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
rc = SQLFreeStmt( hstmt, SQL_CLOSE ) ;
CHECK_HANDLE(SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Eliminar tabla.  */
rc = SQLExecDirect(hstmt, szDrop, SQL_NTS ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
/*  Comprometer los cambios.  */
rc = SQLEndTran( SQL_HANDLE_DBC, hdbc, SQL_COMMIT ) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
 
/*  Desconectar y liberar recursos de CLI.  */
 
rc = SQLFreeHandle(SQL_HANDLE_STMT, hstmt ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
 
printf( "\n>Desconectando .....\n" ) ;
rc = SQLDisconnect(hdbc ) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
 
rc= SQLFreeHandle( SQL_HANDLE_DBC, hdbc ) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
 
rc = SQLFreeHandle( SQL_HANDLE_ENV,  henv ) ;
if ( rc != SQL_SUCCESS ) return( terminate( henv, rc ) ) ;
 
return(SQL_SUCCESS ) ;
 
}                                /* fin parte principal */
    
/* ===============================================================
** Salida de ejemplo:
**  
** >Entre nombre de servidor:
** ejemplo
** >Entre nombre de usuario:
** idusuario
** >Entre contraseña:
** contraseña
** >Conectado a ejemplo
** Crear tabla - CREATE TABLE DL_SAMPL
**    ( DL1 DATALINK LINKTYPE URL FILE LINK CONTROL INTEGRITY ALL
**    READ PERMISSION DB WRITE PERMISSION BLOCKED RECOVERY NO ON UNLINK RESTORE )
** Insertar - INSERT INTO DL_SAMPL VALUES (?)
** Seleccionar - SELECT * FROM DL_SAMPL
** Número de columnas - 1
** Nombre columna - DL1
** Tipo columna - -400
** Precisión columna - 254
** Escala columna - 0
** Columna anulable - TRUE
** Valor columna - 1,URL,79,17,19,HTTP://mycomputer.company.com/nfsdlink/userid/
**    HVJ5NXGC0WQ.I5KKB6;test_1.jpgMyFirst Datalink
 
/* 
   **************************************************************
   En Windows NT, la salida del ejemplo será:
** Valor columna - 1,UNC:\\mycomputer.company.com\nfsdlink\userid\
      HVJ5NXGC0WQ.I5KKB6;test_1.jpgMyFirst Datalink
   **************************************************************
*/
** Atributo 1) <My First Datalink>
** Atributo 2) <URL>
** Atributo 3) <HTTP://mycomputer.company.com/nfsdlink/userid/
**    HVJ5NXGC0WQ.I5KKB6;test_1.jpg>
/* 
   ******************************************************************
   En Windows NT, la salida del ejemplo será:
** Atributo 3) <UNC:\\mycomputer.company.com\nfsdlink\userid\
**    HVJ5NXGC0WQ.I5KKB6;test_1.jpg>
   ******************************************************************
*/
** Atributo 4) </nfsdlink/userid/HVJ5NXGC0WQ.I5KKB6;test_1.jpg>
/* 
   ********************************************************************
   En Windows NT, la salida del ejemplo será:
** Atributo 4) <\nfsdlink\userid\HVJ5NXGC0WQ.I5KKB6;test_1.jpg>
   ********************************************************************
*/
** Atributo 5) </nfsdlink/userid/test_1.jpg>
/* 
   *******************************************************
   En Windows NT, la salida del ejemplo será:
** Atributo 5) <\nfsdlink\userid\test_1.jpg>
   *******************************************************
*/
** Atributo 6) <HTTP>
/* 
   *****************************************
   En Windows NT, la salida del ejemplo será:
** Atributo 6) <UNC>
   *****************************************
*/
** Atributo 7) <mycomputer.company.com>
**  
** >Desconectando .....
**  
** 
=============================================================== */


[ Principio de página | Página anterior | Página siguiente | Contenido | Índice ]