/******************************************************************************* ** ** Source File Name = dbconn.c 1.4 ** ** Licensed Materials - Property of IBM ** ** (C) COPYRIGHT International Business Machines Corp. 1995, 1999 ** All Rights Reserved. ** ** US Government Users Restricted Rights - Use, duplication or ** disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ** ** ** PURPOSE : ** Shows how connect to/disconnect from a database. ** ** 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 DbBasicConnect( SQLHANDLE , char *, char *, char * ) ; int DbDriverConnect( SQLHANDLE , char *, char *, char * ) ; int DbBrowseConnect( SQLHANDLE , char *, char *, char * ) ; /******************************************************************* ** main *******************************************************************/ int main( int argc, char * argv[] ) { SQLRETURN sqlrc = SQL_SUCCESS; int rc = 0; SQLHANDLE henv; /* environment handle */ SQLHANDLE hdbc; /* connection handle */ 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( 1 ) ; } printf("\n\nDATABASES: HOW TO CONNECT TO/DISCONNECT FROM A DATABASE.\n"); /* allocate an environment handle */ sqlrc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) ; if ( sqlrc != SQL_SUCCESS ) { printf( "\n--ERROR while allocating the environment handle.\n" ) ; printf( " sqlrc = %d\n", sqlrc); printf( " line = %d\n", __LINE__); printf( " file = %s\n", __FILE__); return( 1 ) ; } /* connect to a database with SQLConnect, */ /* this is the basic connection */ rc = DbBasicConnect( henv, dbAlias, user, pswd ) ; if ( rc != 0 ) return( rc ) ; /* connect to a database with SQLDriverConnect */ rc = DbDriverConnect( henv, dbAlias, user, pswd ) ; if ( rc != 0 ) return( rc ) ; /* connect to a database with SQLBrowseConnect */ rc = DbBrowseConnect( henv, dbAlias, user, pswd ) ; if ( rc != 0 ) return( rc ) ; /* free the environment handle */ sqlrc = SQLFreeHandle( SQL_HANDLE_ENV, henv ) ; ENV_HANDLE_CHECK( henv, sqlrc ) ; return( 0 ) ; } /* end main */ /****************************************************************************** ** DbBasicConnect - connect to/ disconnect from a database ** using SQLConnect ******************************************************************************/ int DbBasicConnect( SQLHANDLE henv, char db1Alias[], char user[], char pswd[] ) { SQLRETURN sqlrc = SQL_SUCCESS; int rc = 0; SQLHANDLE hdbc; /* connection handle */ printf("\nUSE THE CLI FUNCTIONS\n"); printf("-SQLAllocHandle\n-SQLConnect\n"); printf("-SQLDisconnect\n-SQLFreeHandle\n"); printf("TO CONNECT TO/DISCONNECT FROM A DATABASE:\n"); /* allocate a database connection handle */ sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ; HANDLE_CHECK( SQL_HANDLE_ENV, henv, sqlrc, &henv, &hdbc ) ; /* connect to the database */ printf( "\n Connecting to the database %s ...\n", db1Alias ) ; sqlrc = SQLConnect( hdbc, (SQLCHAR *)db1Alias, SQL_NTS, (SQLCHAR *)user, SQL_NTS, (SQLCHAR *)pswd, SQL_NTS ) ; HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; printf( " Connected to the database %s.\n", db1Alias ) ; /********* Start using the connection *************************/ /********* Stop using the connection **************************/ /* disconnect from the database */ printf( "\n Disconnecting from the database %s ...\n", db1Alias ) ; sqlrc = SQLDisconnect( hdbc ) ; HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; printf( " Disconnected from the database %s.\n", db1Alias ) ; /* free the connection handle */ sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, hdbc ) ; HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; return( 0 ) ; } /****************************************************************************** ** DbDriverConnect - connect to/ disconnect from a database ** using SQLDriverConnect ******************************************************************************/ int DbDriverConnect( SQLHANDLE henv, char db1Alias[], char user[], char pswd[] ) { SQLRETURN sqlrc = SQL_SUCCESS; int rc = 0; SQLHANDLE hdbc; /* connection handle */ SQLCHAR connStr[255]; printf("\nUSE THE CLI FUNCTIONS\n"); printf("-SQLAllocHandle\n-SQLDriverConnect\n"); printf("-SQLDisconnect\n-SQLFreeHandle\n"); printf("TO CONNECT TO/DISCONNECT FROM A DATABASE:\n"); /* allocate a database connection handle */ sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ; HANDLE_CHECK( SQL_HANDLE_ENV, henv, sqlrc, &henv, &hdbc ) ; /* connect to the database */ printf( "\n Connecting to the database %s ...\n", db1Alias ) ; sprintf((char *)connStr, "DSN=%s;UID=%s;PWD=%s;AUTOCOMMIT=0;CONNECTTYPE=1;", db1Alias, user, pswd); sqlrc = SQLDriverConnect(hdbc, (SQLHWND) NULL, connStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; printf( " Connected to the database %s.\n", db1Alias ) ; /********* Start using the connection *************************/ /********* Stop using the connection **************************/ /* disconnect from the database */ printf( "\n Disconnecting from the database %s ...\n", db1Alias ) ; sqlrc = SQLDisconnect( hdbc ) ; HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; printf( " Disconnected from the database %s.\n", db1Alias ) ; /* free the connection handle */ sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, hdbc ) ; HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; return( 0 ) ; } /****************************************************************************** ** DbBrowserConnect - connect to/ disconnect from a database ** using SQLBrowserConnect ******************************************************************************/ int DbBrowseConnect( SQLHANDLE henv, char db1Alias[], char user[], char pswd[] ) { SQLRETURN sqlrc = SQL_SUCCESS; int rc = 0; SQLHANDLE hdbc; /* connection handle */ SQLCHAR connInStr[255]; SQLCHAR OutStr[1025]; SQLSMALLINT indicator; int count=1; printf("\nUSE THE CLI FUNCTIONS:\n"); printf("-SQLBrowseConnect\n"); printf("\nOther CLI FUNCTIONS:\n"); printf("-SQLAllocHandle\n"); printf("-SQLDisconnect\n-SQLFreeHandle\n"); printf("TO CONNECT TO/DISCONNECT FROM A DATABASE:\n"); /* allocate a database connection handle */ sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ; HANDLE_CHECK( SQL_HANDLE_ENV, henv, sqlrc, &henv, &hdbc ) ; /* connect to the database */ printf( "\n Connecting to the database %s ...\n", db1Alias ) ; sprintf((char *)connInStr, "DSN=%s;UID=%s;PWD=%s;AUTOCOMMIT=0;", db1Alias, user, pswd); /********* Start using the connection *************************/ sqlrc = SQL_NEED_DATA; while (sqlrc == SQL_NEED_DATA){ sqlrc = SQLBrowseConnect(hdbc, connInStr, SQL_NTS, OutStr, sizeof(OutStr), &indicator); HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; printf( " So far connect %d times to database %s \n", count++,db1Alias ) ; printf( " OutString: %s\n", OutStr ) ; if(sqlrc == SQL_NEED_DATA){ printf( " You can provide other connection information here by setting connInStr\n" ) ; break; } if(sqlrc == SQL_SUCCESS){ printf( "\n Connected to the database %s.\n", db1Alias ) ; } } /********* Stop using the connection **************************/ /* disconnect from the database */ printf( "\n Disconnecting from the database %s ...\n", db1Alias ) ; sqlrc = SQLDisconnect( hdbc ) ; HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; printf( " Disconnected from the database %s.\n", db1Alias ) ; /* free the connection handle */ sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, hdbc ) ; HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; return( 0 ) ; }