/*******************************************************************************
**
** Source File Name = dbmconn.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 connect to/disconnect from multiple databases.
**
** 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"
#include "utilapi.h"
int TwoDBconnectType1( SQLHANDLE , char *, char *, char *, char * ) ;
int TwoDBconnectType2( SQLHANDLE , char *, char *, char *, char * ) ;
#define MAX_CONNECTIONS 2
/*******************************************************************
** 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] ;
char remoteNodeName[ 10 ] ;
char db2Name[SQL_MAX_DSN_LENGTH + 1] = "SAMPLE2" ;
char db2Alias[SQL_MAX_DSN_LENGTH + 1] = "SAMPLE2" ;
/* checks the command line arguments */
rc = CmdLineArgsCheck2( argc, argv, dbAlias, user, pswd, remoteNodeName );
if ( rc != 0 )
{ return( 1 ) ;
}
printf("\n\nDATABASES: HOW TO CONNECT TO/DISCONNECT FROM\n");
printf(" MULTIPLE DATABASES.\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 ) ;
}
/* create and catalog a second database */
/* using administrative APIs*/
rc = DbCreate( remoteNodeName, user, pswd, db2Name, db2Alias ) ;
if( rc == 0)
{ /* connect to two databases using Connect Type 2 */
rc = TwoDBconnectType2( henv, dbAlias, db2Alias, user, pswd ) ;
if ( rc != 0 )
{ DbDrop( remoteNodeName, user, pswd, db2Alias );
return( rc ) ;
}
/* connect to two databases using Connect Type 1 */
rc = TwoDBconnectType1( henv, dbAlias, db2Alias, user, pswd ) ;
if ( rc != 0 )
{ DbDrop( remoteNodeName, user, pswd, db2Alias );
return( rc ) ;
}
/* drop and uncatalog the second database */
/* using administrative APIs */
rc = DbDrop( remoteNodeName, user, pswd, db2Alias ) ;
}
/* free the environment handle */
sqlrc = SQLFreeHandle( SQL_HANDLE_ENV, henv ) ;
ENV_HANDLE_CHECK( henv, sqlrc ) ;
return( 0 ) ;
} /* end main */
/******************************************************************************
** TwoDBconnectType1 - connect/disconnect to/from two databases
** using the Connect Type 1
******************************************************************************/
int TwoDBconnectType1( SQLHANDLE henv,
char db1Alias[],
char db2Alias[],
char user[],
char pswd[] )
{ SQLRETURN sqlrc = SQL_SUCCESS;
int rc = 0;
SQLHANDLE a_hdbc[MAX_CONNECTIONS] ; /* array of connection handles */
printf("\nUSE THE CLI FUNCTIONS\n");
printf("-SQLAllocHandle\n-SQLConnect\n");
printf("-SQLDisconnect\n-SQLFreeHandle\n");
printf("TO CONNECT TO/DISCONNECT FROM TWO DATABASES\n");
printf("USING THE CONNECT TYPE 1:\n");
/* allocate the database connection handles */
sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &a_hdbc[0] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &a_hdbc[1] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
/* connect to both databases */
printf( "\n Connecting to the database %s ...\n", db1Alias ) ;
sqlrc = SQLConnect( a_hdbc[0],
(SQLCHAR *)db1Alias, SQL_NTS,
(SQLCHAR *)user, SQL_NTS,
(SQLCHAR *)pswd, SQL_NTS
) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Connected to the database %s.\n", db1Alias ) ;
printf( "\n Connecting to the database %s ...\n", db2Alias ) ;
sqlrc = SQLConnect( a_hdbc[1],
(SQLCHAR *)db2Alias, SQL_NTS,
(SQLCHAR *)user, SQL_NTS,
(SQLCHAR *)pswd, SQL_NTS
) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Connected to the database %s.\n", db2Alias ) ;
/********* Start using the connections ************************/
/********* Stop using the connections *************************/
/* disconnect from both databases */
printf( "\n Disconnecting from the database %s ...\n", db1Alias ) ;
sqlrc = SQLDisconnect( a_hdbc[0] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Disconnected from the database %s.\n", db1Alias ) ;
printf( "\n Disconnecting from the database %s ...\n", db2Alias ) ;
sqlrc = SQLDisconnect( a_hdbc[1] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Disconnected from the database %s.\n", db2Alias ) ;
/* free the connection handles */
sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, a_hdbc[0] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, a_hdbc[1] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
return( 0 ) ;
}
/******************************************************************************
** TwoDBconnectType2 - connect/disconnect to/from two databases
** using the Connect Type 2
******************************************************************************/
int TwoDBconnectType2( SQLHANDLE henv,
char db1Alias[],
char db2Alias[],
char user[],
char pswd[] )
{ SQLRETURN sqlrc = SQL_SUCCESS;
int rc = 0;
SQLHANDLE a_hdbc[MAX_CONNECTIONS] ; /* array of connection handles */
printf("\nUSE THE CLI FUNCTIONS\n");
printf("-SQLAllocHandle\n-SQLSetConnectAttr\n-SQLConnect\n");
printf("-SQLDisconnect\n-SQLFreeHandle\n");
printf("TO CONNECT TO/DISCONNECT FROM TWO DATABASES\n");
printf("USING THE CONNECT TYPE 2:\n");
/* allocate the database connection handles */
sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &a_hdbc[0] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &a_hdbc[1] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
/* set CONNECT TYPE 2, SYNCPOINT 1 for the both connections */
sqlrc = SQLSetConnectAttr( a_hdbc[0],
SQL_CONNECTTYPE,
( SQLPOINTER ) SQL_COORDINATED_TRANS,
SQL_NTS) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
sqlrc = SQLSetConnectAttr( a_hdbc[0],
SQL_SYNC_POINT,
( SQLPOINTER ) SQL_ONEPHASE,
SQL_NTS) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
sqlrc = SQLSetConnectAttr( a_hdbc[1],
SQL_CONNECTTYPE,
( SQLPOINTER ) SQL_COORDINATED_TRANS,
SQL_NTS) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
sqlrc = SQLSetConnectAttr( a_hdbc[1],
SQL_SYNC_POINT,
( SQLPOINTER ) SQL_ONEPHASE,
SQL_NTS) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
/* connect to both databases */
printf( "\n Connecting to the database %s ...\n", db1Alias ) ;
sqlrc = SQLConnect( a_hdbc[0],
(SQLCHAR *)db1Alias, SQL_NTS,
(SQLCHAR *)user, SQL_NTS,
(SQLCHAR *)pswd, SQL_NTS
) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Connected to the database %s.\n", db1Alias ) ;
printf( "\n Connecting to the database %s ...\n", db2Alias ) ;
sqlrc = SQLConnect( a_hdbc[1],
(SQLCHAR *)db2Alias, SQL_NTS,
(SQLCHAR *)user, SQL_NTS,
(SQLCHAR *)pswd, SQL_NTS
) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Connected to the database %s.\n", db2Alias ) ;
/********* Start using the connections ************************/
/********* Stop using the connections *************************/
/* disconnect from both databases */
printf( "\n Disconnecting from the database %s ...\n", db1Alias ) ;
sqlrc = SQLDisconnect( a_hdbc[0] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Disconnected from the database %s.\n", db1Alias ) ;
printf( "\n Disconnecting from the database %s ...\n", db2Alias ) ;
sqlrc = SQLDisconnect( a_hdbc[1] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
printf( " Disconnected from the database %s.\n", db2Alias ) ;
/* free the connection handles */
sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, a_hdbc[0] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[0], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, a_hdbc[1] ) ;
MC_HANDLE_CHECK( SQL_HANDLE_DBC, a_hdbc[1], sqlrc,
&henv, a_hdbc, MAX_CONNECTIONS ) ;
return( 0 ) ;
}