/******************************************************************************* ** ** Source File Name = dtinfo.c ** ** Licensed Materials - Property of IBM ** ** (C) COPYRIGHT International Business Machines Corp. 1995, 2000 ** All Rights Reserved. ** ** US Government Users Restricted Rights - Use, duplication or ** disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ** ** ** PURPOSE : ** Shows how get info about data types. ** ** For more information about these samples see the README file. ** ** For more information on programming in CLI see the: ** - "Building CLI Applications" section of the Application Building Guide, and the ** - CLI Guide and Reference. ** ** For more information on the SQL language see the SQL Reference. ** *******************************************************************************/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sqlcli1.h> #include "utilcli.h" /* Header file for CLI sample code */ int DtInfoGet( SQLHANDLE) ; /******************************************************************* ** main *******************************************************************/ int main( int argc, char * argv[] ) { SQLRETURN sqlrc = SQL_SUCCESS; int rc = 0; SQLHANDLE henv; /* environment handle */ SQLHANDLE hdbc; /* connection handles */ char dbAlias[SQL_MAX_DSN_LENGTH + 1] ; char user[MAX_UID_LENGTH + 1] ; char pswd[MAX_PWD_LENGTH + 1] ; /* checks the command line arguments */ rc = CmdLineArgsCheck1( argc, argv, dbAlias, user, pswd ); if ( rc != 0 ) return( rc ) ; printf("\n\nDATA TYPES: HOW TO GET INFO ABOUT DATA TYPES.\n"); /* initialize the CLI application */ rc = CLIAppInit( dbAlias, user, pswd, &henv, &hdbc, (SQLPOINTER)SQL_AUTOCOMMIT_ON); if ( rc != 0 ) return( rc ) ; rc = DtInfoGet( hdbc) ; /* terminate the CLI application */ rc = CLIAppTerm( &henv, &hdbc, dbAlias); return( rc ) ; } /* end main */ /****************************************************************************** ** DtInfoGet ******************************************************************************/ int DtInfoGet( SQLHANDLE hdbc) { SQLRETURN sqlrc = SQL_SUCCESS; int rc = 0; SQLHANDLE hstmt ; /* statement handle */ struct { SQLINTEGER ind ; SQLCHAR val[129] ; } dtName; struct { SQLINTEGER ind ; SQLSMALLINT val ; } dtCode, dtNullable, dtCaseSens; struct { SQLINTEGER ind; SQLINTEGER val; } dtPrecision; SQLINTEGER count = 0; char truefalse[2][6] = {{"FALSE"}, {"TRUE"}}; printf("\nUSE THE CLI FUNCTIONS\n"); printf("-SQLSetConnectAttr\n-SQLAllocHandle\n"); printf("-SQLGetTypeInfo\n-SQLBindCol\n"); printf("-SQLFetch\n-SQLFreeHandle\n"); printf("TO GET INFO ABOUT DATA TYPES:\n"); /* set AUTOCOMMIT on */ sqlrc = SQLSetConnectAttr( hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_NTS) ; DBC_HANDLE_CHECK( hdbc, sqlrc); /* allocate a statement handle */ sqlrc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ; DBC_HANDLE_CHECK( hdbc, sqlrc); /*--> 00000627.snippet */ /* call SQLTables */ printf("\n Call SQLGetTypeInfo.\n"); sqlrc = SQLGetTypeInfo( hstmt, SQL_ALL_TYPES); STMT_HANDLE_CHECK( hstmt, sqlrc); /* 00000627.snippet <--*/ /* bind columns to variables */ sqlrc = SQLBindCol( hstmt, 1, SQL_C_CHAR, ( SQLPOINTER)dtName.val, 129, &dtName.ind ) ; STMT_HANDLE_CHECK( hstmt, sqlrc); sqlrc = SQLBindCol( hstmt, 2, SQL_C_DEFAULT, ( SQLPOINTER)&dtCode.val, sizeof(dtCode.val), &dtCode.ind ) ; STMT_HANDLE_CHECK( hstmt, sqlrc); sqlrc = SQLBindCol( hstmt, 3, SQL_C_DEFAULT, ( SQLPOINTER)&dtPrecision.val, sizeof(dtPrecision.val), &dtPrecision.ind ) ; STMT_HANDLE_CHECK( hstmt, sqlrc); sqlrc = SQLBindCol( hstmt, 7, SQL_C_DEFAULT, ( SQLPOINTER)&dtNullable.val, sizeof(dtNullable.val), &dtNullable.ind ) ; STMT_HANDLE_CHECK( hstmt, sqlrc); sqlrc = SQLBindCol( hstmt, 8, SQL_C_DEFAULT, ( SQLPOINTER)&dtCaseSens.val, sizeof(dtCaseSens.val), &dtCaseSens.ind ) ; STMT_HANDLE_CHECK( hstmt, sqlrc); /* fetch each row, and display */ printf(" Fetch each row and dispaly.\n"); printf("Datatype Datatype Precision Nullab. Case\n"); printf("Typename (int) Sensit.\n"); printf("------------------------- -------- ---------- ------- -------\n"); sqlrc = SQLFetch( hstmt ); STMT_HANDLE_CHECK( hstmt, sqlrc); if (sqlrc == SQL_NO_DATA_FOUND) { printf("\n Data not found.\n"); } while (sqlrc != SQL_NO_DATA_FOUND) { printf("%-25s ", dtName.val); printf("%8d ", dtCode.val); printf("%10ld ", dtPrecision.val); printf("%-7s ", truefalse[dtNullable.val]); printf("%-7s\n", truefalse[dtCaseSens.val]); sqlrc = SQLFetch( hstmt ); STMT_HANDLE_CHECK( hstmt, sqlrc); } /* free the statement handle */ sqlrc = SQLFreeHandle( SQL_HANDLE_STMT, hstmt ) ; STMT_HANDLE_CHECK( hstmt, sqlrc); return(rc); }