DSN8O3VP sample application
The DSN8O3VP sample program validates the installation of Db2 ODBC.
The following code contains
the sample program DSN810.SDSNSAMP(DSN8O3VP).
/*********************************************************************/
/* DB2 ODBC 3.0 installation certification test to validate */
/* installation. */
/* */
/* DSNTEJ8 is sample JCL to that can be used to run this */
/* application. */
/*********************************************************************/
/******************************************************************/
/* Include the 'C' include files */
/******************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sqlcli1.h"
/******************************************************************/
/* Variables */
/******************************************************************/
#ifndef NULL
#define NULL 0
#endif
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc = SQL_NULL_HDBC;
SQLHDBC hstmt= SQL_NULL_HSTMT;
SQLRETURN rc = SQL_SUCCESS;
SQLINTEGER id;
SQLCHAR name[51]
SQLINTEGER namelen, intlen, colcount;
struct sqlca sqlca;
SQLCHAR server[18]
SQLCHAR uid[30]
SQLCHAR pwd[30]
SQLCHAR sqlstmt[500]
SQLRETURN check_error(SQLSMALLINT,SQLHANDLE,SQLRETURN,int,char *);
SQLRETURN print_error(SQLSMALLINT,SQLHANDLE,SQLRETURN,int,char *);
SQLRETURN prt_sqlca(void);
#define CHECK_HANDLE( htype, hndl, rc ) if ( rc != SQL_SUCCESS ) \
{check_error(htype,hndl,rc,__LINE__,__FILE__);goto dberror;}
/******************************************************************/
/* Main Program */
/******************************************************************/
int main()
{
printf("DSN8O3VP INITIALIZATION\n");
printf("DSN8O3VP SQLAllocHandle-Environment\n");
henv=0;
rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) ;
CHECK_HANDLE( SQL_HANDLE_ENV, henv, rc );
printf("DSN8O3VP-henv=%i\n",henv);
printf("DSN8O3VP SQLAllocHandle-Environment successful\n");
printf("DSN8O3VP SQLAllocHandle-Connection\n");
hdbc=0;
rc=SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc );
printf("DSN8O3VP-hdbc=%i\n",hdbc);
printf("DSN8O3VP SQLAllocHandle-Connection successful\n");
printf("DSN8O3VP SQLConnect\n");
strcpy((char *)uid,"");
strcpy((char *)pwd,"");
strcpy((char *)server,"ignore");
/* sample is NULL connect to default datasource */
rc=SQLConnect(hdbc,NULL,0,NULL,0,NULL,0);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc );
printf("DSN8O3VP successfully issued a SQLconnect\n");
printf("DSN8O3VP SQLAllocHandle-Statement\n");
hstmt=0;
rc=SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc );
printf("DSN8O3VP hstmt=%i\n",hstmt);
printf("DSN8O3VP SQLAllocHandle-Statement successful\n");
printf("DSN8O3VP SQLExecDirect\n");
strcpy((char *)sqlstmt,"SELECT * FROM SYSIBM.SYSDUMMY1");
printf("DSN8O3VP sqlstmt=%s\r",sqlstmt);
rc=SQLExecDirect(hstmt,sqlstmt,SQL_NTS);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc );
printf("DSN8O3VP successfully issued a SQLExecDirect\n");
/* sample fetch without looking at values */
printf("DSN8O3VP SQLFetch\n");
rc=SQLFetch(hstmt);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc );
printf("DSN8O3VP successfully issued a SQLFetch\n");
printf("DSN8O3VP SQLEndTran-Commit\n");
rc=SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc );
printf("DSN8O3VP SQLEndTran-Commit successful\n");
printf("DSN8O3VP SQLFreeHandle-Statement\n");
rc=SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc );
hstmt=0;
printf("DSN8O3VP SQLFreeHandle-Statement successful\n");
/******** SQLDisconnect ******************************************/
printf("DSN8O3VP SQLDisconnect\n");
rc=SQLDisconnect(hdbc);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc );
printf("DSN8O3VP successfully issued a SQLDisconnect\n");
/******** SQLFreeConnect *****************************************/
printf("DSN8O3VP SQLFreeHandle-Connection\n");
rc=SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc );
hdbc=0;
printf("DSN8O3VP SQLFreeHandle-Connection successful\n");
/******** SQLFreeEnv *********************************************/
printf("DSN8O3VP SQLFreeHandle-Environment\n");
rc=SQLFreeHandle(SQL_HANDLE_ENV,henv);
CHECK_HANDLE( SQL_HANDLE_ENV, henv, rc );
henv=0;
printf("DSN8O3VP SQLFreeHandle-Environment successful\n");
pgmend:
printf("DSN8O3VP pgmend: Ending sample\n");
if (rc==0)
printf("DSN8O3VP Execution was SUCCESSFUL\n");
else
{
printf("DSN8O3VP***************************\n");
printf("DSN8O3VP Execution FAILED\n");
printf("DSN8O3VP rc = %i\n", rc );
printf("DSN8O3VP ***************************\n");
}
return(rc);
dberror:
printf("DSN8O3VP dberror: entry dberror rtn\n");
printf("DSN8O3VP dberror: rc=%d\n",rc);
printf("DSN8O3VP dberror: environment cleanup attempt\n");
printf("DSN8O3VP dberror: cleanup SQLFreeEnv\n");
rc=SQLFreeEnv(henv);
printf("DSN8O3VP dberror: cleanup SQLFreeEnv rc =%d\n",rc);
rc=12;
printf("DSN8O3VP dberror: setting error rc=%d\n",rc);
goto pgmend;
} /*END MAIN*/
/******************************************************************/
/* check_error */
/******************************************************************/
/* RETCODE values from sqlcli.h */
/*#define SQL_SUCCESS 0 */
/*#define SQL_SUCCESS_WITH_INFO 1 */
/*#define SQL_NO_DATA_FOUND 100 */
/*#define SQL_NEED_DATA 99 */
/*#define SQL_NO_DATA SQL_NO_DATA_FOUND */
/*#define SQL_STILL_EXECUTING 2 not currently returned */
/*#define SQL_ERROR -1 */
/*#define SQL_INVALID_HANDLE -2 */
/******************************************************************/
SQLRETURN check_error( SQLSMALLINT htype, /* A handle type */
SQLHANDLE hndl, /* A handle */
SQLRETURN frc, /* Return code */
int line, /* Line error issued */
char * file /* file error issued */
) {
SQLCHAR cli_sqlstate[SQL_SQLSTATE_SIZE + 1];
SQLINTEGER cli_sqlcode;
SQLSMALLINT length;
printf("DSN8O3VP entry check_error rtn\n");
switch (frc) {
case SQL_SUCCESS:
break;
case SQL_INVALID_HANDLE:
printf("DSN8O3VP check_error> SQL_INVALID HANDLE \n");
break;
case SQL_ERROR:
printf("DSN8O3VP check_error> SQL_ERROR\n");
break;
case SQL_SUCCESS_WITH_INFO:
printf("DSN8O3VP check_error> SQL_SUCCESS_WITH_INFO\n");
break;
case SQL_NO_DATA_FOUND:
printf("DSN8O3VP check_error> SQL_NO_DATA_FOUND\n");
break;
default:
printf("DSN8O3VP check_error> Received rc from api rc=%i\n",frc);
break;
} /*end switch*/
print_error(htype,hndl,frc,line,file);
printf("DSN8O3VP SQLGetSQLCA\n");
rc = SQLGetSQLCA(henv, hdbc, hstmt, &sqlca);
if( rc == SQL_SUCCESS )
prt_sqlca();
else
printf("DSN8O3VP check_error SQLGetSQLCA failed rc=%i\n",rc);
printf("DSN8O3VP exit check_error rtn\n");
return (frc);
} /* end check_error */
/******************************************************************/
/* print_error */
/* calls SQLGetDiagRec()
displays SQLSTATE and message */
/******************************************************************/
SQLRETURN print_error( SQLSMALLINT htype, /* A handle type */
SQLHANDLE hndl, /* A handle */
SQLRETURN frc, /* Return code */
int line, /* error from line */
char * file /* error from file */
) {
SQLCHAR buffer[SQL_MAX_MESSAGE_LENGTH + 1] ;
SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1] ;
SQLINTEGER sqlcode ;
SQLSMALLINT length, i ;
SQLRETURN prc;
printf("DSN8O3VP entry print_error rtn\n");
printf("DSN8O3VP rc=%d reported from file:%s,line:%d ---\n",
frc,
file,
line
) ;
i = 1 ;
while ( SQLGetDiagRec( htype,
hndl,
i,
sqlstate,
&sqlcode,
buffer,
SQL_MAX_MESSAGE_LENGTH + 1,
&length
) == SQL_SUCCESS ) {
printf( "DSN8O3VP SQLSTATE: %s\n", sqlstate ) ;
printf( "DSN8O3VP Native Error Code: %ld\n", sqlcode ) ;
printf( "DSN8O3VP buffer: %s \n", buffer ) ;
i++ ;
}
printf( ">--------------------------------------------------\n" ) ;
printf("DSN8O3VP exit print_error rtn\n");
return( SQL_ERROR ) ;
} /* end print_error */
/******************************************************************/
/* prt_sqlca */
/******************************************************************/
SQLRETURN
prt_sqlca()
{
int i;
printf("DSN8O3VP entry prt_sqlca rtn\n");
printf("\r\rDSN8O3VP*** Printing the SQLCA:\r");
printf("\nDSN8O3VP SQLCAID .... %s",sqlca.sqlcaid);
printf("\nDSN8O3VP SQLCABC .... %d",sqlca.sqlcabc);
printf("\nDSN8O3VP SQLCODE .... %d",sqlca.sqlcode);
printf("\nDSN8O3VP SQLERRML ... %d",sqlca.sqlerrml);
printf("\nDSN8O3VP SQLERRMC ... %s",sqlca.sqlerrmc);
printf("\nDSN8O3VP SQLERRP ... %s",sqlca.sqlerrp);
for (i = 0; i < 6; i++)
printf("\nDSN8O3VP SQLERRD%d ... %d",i+1,sqlca.sqlerrd??(i??));
for (i = 0; i < 10; i++)
printf("\nDSN8O3VP SQLWARN%d ... %c",i,sqlca.sqlwarn[i]);
printf("\nDSN8O3VP SQLWARNA ... %c",sqlca.sqlwarn[10]);
printf("\nDSN8O3VP SQLSTATE ... %s",sqlca.sqlstate);
printf("\nDSN8O3VP exit prt_sqlca rtn\n");
return(0);
} /* End of prt_sqlca */
/*******************************************************************/
/* END DSN8O3VP */
/*******************************************************************/