/*******************************************************************************
**
** Source File Name = multicon.c 1.3
**
** 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 :
** - Demonstrate connecting to multiple data sources.
** - Print Connection information
** - Disconnect from each data source
** - Basic error handling only
**
** 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 <stdlib.h>
#include <sqlcli1.h>
#include "samputil.h" /* Header file for CLI sample code */
/* For the Macintosh environment when generating 68K applications */
#ifdef DB268K
/* Need to include ASLM for 68K applications */
#include <LibraryManager.h>
#endif
#define MAX_CONNECTIONS 5
/*
Global Variables for user id and password.
To keep samples simple, not a recommended practice.
*/
extern SQLCHAR server[SQL_MAX_DSN_LENGTH + 1] ;
extern SQLCHAR uid[MAX_UID_LENGTH + 1] ;
extern SQLCHAR pwd[MAX_PWD_LENGTH + 1] ;
/* main */
int main( int argc, char * argv[] ) {
SQLHANDLE henv, hdbc[MAX_CONNECTIONS] ;
SQLRETURN rc ;
int con = 0 ;
char prompt[2] ;
/* For the Macintosh environment when generating 68K applications */
#ifdef DB268K
/* Before making any API calls for 68K environment, need to initialize the
Library Manager */
InitLibraryManager(0,kCurrentZone,kNormalMemory);
atexit(CleanupLibraryManager);
#endif
/* allocate an environment handle */
rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) ;
if ( rc != SQL_SUCCESS ) return( terminate( henv, rc ) ) ;
/*
Before allocating any connection handles, set Environment wide
Connect Options
Set to Connect Type 2, Syncpoint 1
*/
if ( SQLSetEnvAttr( henv,
SQL_CONNECTTYPE,
( SQLPOINTER ) SQL_COORDINATED_TRANS,
0
) != SQL_SUCCESS ) {
printf( ">---ERROR while setting Connect Type 2 -------------\n" ) ;
return( SQL_ERROR ) ;
}
if ( SQLSetEnvAttr( henv,
SQL_SYNC_POINT,
( SQLPOINTER ) SQL_ONEPHASE,
0
) != SQL_SUCCESS ) {
printf( ">---ERROR while setting Syncpoint One Phase -------------\n" ) ;
return( SQL_ERROR ) ;
}
/* Connect to one or more data sources */
while ( con < MAX_CONNECTIONS ) {
printf( "Connect to another Data Source?(Y or N)\n" ) ;
gets( prompt ) ;
if ( *prompt == 'y' || *prompt == 'Y' ) {
rc = prompted_connect( henv, &hdbc[con] ) ;
if ( rc != SQL_SUCCESS ) return( terminate( henv, rc ) ) ;
con++ ;
}
else break ;
}
/********* Start Processing Step *************************/
/* allocate statement handle, execute statement, etc. */
/********* End Processing Step ***************************/
/* Disconnect and Free each Connection */
printf( "Disconnecting ...\n" ) ;
con-- ;
while ( con >= 0 ) {
rc = SQLDisconnect( hdbc[con] ) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc[con], rc ) ;
rc = SQLFreeHandle( SQL_HANDLE_DBC, hdbc[con] ) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc[1], rc ) ;
con-- ;
}
/* free environment handle */
rc = SQLFreeHandle( SQL_HANDLE_ENV, henv ) ;
if ( rc != SQL_SUCCESS ) return( terminate( henv, rc ) ) ;
return( SQL_SUCCESS ) ;
}