/****************************************************************************
** (c) Copyright IBM Corp. 2007 All rights reserved.
**
** The following sample of source code ("Sample") is owned by International
** Business Machines Corporation or one of its subsidiaries ("IBM") and is
** copyrighted and licensed, not sold. You may use, copy, modify, and
** distribute the Sample in any form without payment to IBM, for the purpose of
** assisting you in the development of your applications.
**
** The Sample code is provided to you on an "AS IS" basis, without warranty of
** any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR
** IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do
** not allow for the exclusion or limitation of implied warranties, so the above
** limitations or exclusions may not apply to you. IBM shall not be liable for
** any damages you suffer as a result of using, copying, modifying or
** distributing the Sample, even if IBM has been advised of the possibility of
** such damages.
*****************************************************************************
**
** SOURCE FILE NAME: cli_info.c
**
** SAMPLE: Set and get information at the client level
**
** DB2 APIs USED:
** sqlesetc -- SET CLIENT
** sqleseti -- SET CLIENT INFORMATION
** sqleqryc -- QUERY CLIENT
** sqleqryi -- QUERY CLIENT INFORMATION
**
** STRUCTURES USED:
** sqlca
** sqle_client_info
** sqle_conn_setting
**
**
*****************************************************************************
*
* For information on developing embedded SQL applications see the Developing Embedded SQL Applications book.
*
* For more information on DB2 APIs, see the Administrative API Reference.
*
* For the latest information on programming, compiling, and running DB2
* applications, visit the DB2 Information Center:
* http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlenv.h>
#include "utilapi.h"
int ClientAppNameSetGet(void);
int ClientUseridSetGet(void);
int ClientWorkstationSetGet(void);
int ClientSuffixForAccountingStringSetGet(void);
int ClientConnectionAttrsSetGet(void);
int main(int argc, char *argv[])
{
int rc = 0;
/* check command line arguments */
if (argc != 1)
{
printf("\nUSAGE: %s \n", argv[0]);
return 1;
}
printf("\nHOW TO SET AND GET INFOMATION AT THE CLIENT LEVEL.\n");
rc = ClientAppNameSetGet();
rc = ClientUseridSetGet();
rc = ClientWorkstationSetGet();
rc = ClientSuffixForAccountingStringSetGet();
rc = ClientConnectionAttrsSetGet();
return 0;
} /* end main */
int ClientAppNameSetGet(void)
{
struct sqlca sqlca;
struct sqle_client_info clientAppInfo[1];
unsigned short dbAliasLen;
char dbAlias[SQL_ALIAS_SZ + 1];
printf("\n-----------------------------------------------------------");
printf("\nUSE THE DB2 APIs:\n");
printf(" sqleseti -- SET CLIENT INFORMATION\n");
printf(" sqleqryi -- QUERY CLIENT INFORMATION\n");
printf("TO SET/GET THE CLIENT APPL. NAME:\n");
/* specify all the connections */
dbAliasLen = 0;
strcpy(dbAlias, "");
/* initialize clientAppInfo */
clientAppInfo[0].type = SQLE_CLIENT_INFO_APPLNAME;
clientAppInfo[0].pValue =
(char *)malloc(sizeof(char) *(SQLE_CLIENT_APPLNAME_MAX_LEN + 1));
/* set client app. name */
strcpy(clientAppInfo[0].pValue, "ClientApplicationName");
clientAppInfo[0].length = strlen((char *)clientAppInfo[0].pValue);
printf("\n Set the Client App. Name to the value:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* set client information */
sqleseti(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client App. Name -- set");
/* get client app. name */
strcpy(clientAppInfo[0].pValue, "");
printf(" Get the Client App. Name.\n");
/* query client information */
sqleqryi(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client App. Name -- get");
printf(" The Client App. Name is:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* free the memory allocated */
free(clientAppInfo[0].pValue);
return 0;
} /* ClientAppNameSetGet */
int ClientUseridSetGet(void)
{
struct sqlca sqlca;
struct sqle_client_info clientAppInfo[1];
unsigned short dbAliasLen;
char dbAlias[SQL_ALIAS_SZ + 1];
printf("\n-----------------------------------------------------------");
printf("\nUSE THE DB2 APIs:\n");
printf(" sqleseti -- SET CLIENT INFORMATION\n");
printf(" sqleqryi -- QUERY CLIENT INFORMATION\n");
printf("TO SET/GET THE CLIENT USERID:\n");
/* specify all the connections */
dbAliasLen = 0;
strcpy(dbAlias, "");
/* initialize clientAppInfo */
clientAppInfo[0].type = (unsigned short)SQLE_CLIENT_INFO_USERID;
clientAppInfo[0].pValue = (char *)malloc(SQLE_CLIENT_USERID_MAX_LEN + 1);
/* set client user ID */
strcpy(clientAppInfo[0].pValue, "ClientUserid");
clientAppInfo[0].length = strlen((char *)clientAppInfo[0].pValue);
printf("\n Set the Client User ID to the value:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* set client information */
sqleseti(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client User ID -- set");
/* get client user ID */
strcpy(clientAppInfo[0].pValue, "");
printf(" Get the Client User ID.\n");
/* query client information */
sqleqryi(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client User ID -- get");
printf(" The Client User ID is:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* free the memory allocated */
free(clientAppInfo[0].pValue);
return 0;
} /* ClientUseridSetGet */
int ClientWorkstationSetGet(void)
{
struct sqlca sqlca;
struct sqle_client_info clientAppInfo[1];
unsigned short dbAliasLen;
char dbAlias[SQL_ALIAS_SZ + 1];
printf("\n-----------------------------------------------------------");
printf("\nUSE THE DB2 APIs:\n");
printf(" sqleseti -- SET CLIENT INFORMATION\n");
printf(" sqleqryi -- QUERY CLIENT INFORMATION\n");
printf("TO SET/GET THE CLIENT WORKSTATION NAME:\n");
/* specify all the connections */
dbAliasLen = 0;
strcpy(dbAlias, "");
/* initialize clientAppInfo */
clientAppInfo[0].type = SQLE_CLIENT_INFO_WRKSTNNAME;
clientAppInfo[0].pValue =
(char *)malloc(sizeof(char) *(SQLE_CLIENT_WRKSTNNAME_MAX_LEN + 1));
/* set client workstation name*/
strcpy(clientAppInfo[0].pValue, "ClientWorkstation");
clientAppInfo[0].length = strlen((char *)clientAppInfo[0].pValue);
printf("\n Set the Client Workstation Name to the value:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* set client information */
sqleseti(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client Workstation Name -- set");
/* get client workstation name */
strcpy(clientAppInfo[0].pValue, "");
printf(" Get the Client Workstation Name.\n");
/* query client information */
sqleqryi(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client Workstation Name -- get");
printf(" The Client Workstation Name is:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* free the memory allocated */
free(clientAppInfo[0].pValue);
return 0;
} /* ClientWorkstationSetGet */
int ClientSuffixForAccountingStringSetGet(void)
{
struct sqlca sqlca;
struct sqle_client_info clientAppInfo[1];
char clientAccStrSuffix[] = "ClientSuffixForAccountingString";
unsigned short dbAliasLen;
char dbAlias[SQL_ALIAS_SZ + 1];
printf("\n-----------------------------------------------------------");
printf("\nUSE THE DB2 APIs:\n");
printf(" sqleseti -- SET CLIENT INFORMATION\n");
printf(" sqleqryi -- QUERY CLIENT INFORMATION\n");
printf("TO SET/GET THE CLIENT SUFFIX FOR THE ACCOUNTING STRING:\n");
/* specify all the connections */
dbAliasLen = 0;
strcpy(dbAlias, "");
/* initialize clientAppInfo */
clientAppInfo[0].type = SQLE_CLIENT_INFO_ACCTSTR;
clientAppInfo[0].pValue =
(char *)malloc(sizeof(char) *(SQLE_CLIENT_APPLNAME_MAX_LEN + 1));
/* set client suffix for accounting string */
strcpy(clientAppInfo[0].pValue, "ClientSuffixForAccountingString");
clientAppInfo[0].length = strlen((char *)clientAppInfo[0].pValue);
printf("\n Use the DB2 API sqleseti to set\n");
printf(" the Client Suffix for Accounting String to the value:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* set client information */
sqleseti(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client Suffix for Accounting String -- set");
/* get client suffix for accounting string */
strcpy(clientAppInfo[0].pValue, "");
printf(" Get the Client Suffix for Accounting String.\n");
/* query client information */
sqleqryi(dbAliasLen, dbAlias, 1, &clientAppInfo[0], &sqlca);
DB2_API_CHECK("Client Suffix for Accounting String -- get");
printf(" The Client Suffix for Accounting String is:\n");
printf(" %s\n", clientAppInfo[0].pValue);
/* free the memory allocated */
free(clientAppInfo[0].pValue);
return 0;
} /* ClientSuffixForAccountingStringSetGet */
int ClientConnectionAttrsSetGet(void)
{
struct sqlca sqlca;
struct sqle_conn_setting clientAppInfo[8];
printf("\n-----------------------------------------------------------");
printf("\nUSE THE DB2 APIs:\n");
printf(" sqlesetc -- SET CLIENT\n");
printf(" sqleqryc -- QUERY CLIENT\n");
printf("TO SET/GET THE CLIENT CONNECTION ATTRIBUTES:\n");
/* initialize clientAppInfo */
clientAppInfo[0].type = SQL_CONNECT_TYPE;
clientAppInfo[1].type = SQL_RULES;
clientAppInfo[2].type = SQL_DISCONNECT;
clientAppInfo[3].type = SQL_SYNCPOINT;
clientAppInfo[4].type = SQL_MAX_NETBIOS_CONNECTIONS;
clientAppInfo[5].type = SQL_DEFERRED_PREPARE;
clientAppInfo[6].type = SQL_CONNECT_NODE;
clientAppInfo[7].type = SQL_ATTACH_NODE;
clientAppInfo[0].value = SQL_CONNECT_2;
clientAppInfo[1].value = SQL_RULES_STD;
clientAppInfo[2].value = SQL_DISCONNECT_COND;
clientAppInfo[3].value = SQL_SYNC_ONEPHASE;
clientAppInfo[4].value = 16;
clientAppInfo[5].value = SQL_DEFERRED_PREPARE_YES;
clientAppInfo[6].value = 3;
clientAppInfo[7].value = 3;
/* set client connection attributes */
printf("\n Set the Client Connection Attributes to the values:\n");
printf(" SQL_CONNECT_TYPE = SQL_CONNECT_2\n");
printf(" SQL_RULES = SQL_RULES_STD\n");
printf(" SQL_DISCONNECT = SQL_DISCONNECT_COND\n");
printf(" SQL_SYNCPOINT = SQL_SYNC_ONEPHASE\n");
printf(" SQL_MAX_NETBIOS_CONNECTIONS = 16\n");
printf(" SQL_DEFERRED_PREPARE = SQL_DEFERRED_PREPARE_YES\n");
printf(" SQL_CONNECT_NODE = 3\n");
printf(" SQL_ATTACH_NODE = 3\n");
/* set client */
sqlesetc(&clientAppInfo[0], 8, &sqlca);
DB2_API_CHECK("Client Connection Attributes -- set");
/* get client connection attributes */
/* reset clientAppInfo */
clientAppInfo[0].value = SQL_CONNECT_1;
clientAppInfo[1].value = SQL_RULES_DB2;
clientAppInfo[2].value = SQL_DISCONNECT_EXPL;
clientAppInfo[3].value = SQL_SYNC_TWOPHASE;
clientAppInfo[4].value = 1;
clientAppInfo[5].value = SQL_DEFERRED_PREPARE_NO;
clientAppInfo[6].value = 1;
clientAppInfo[7].value = 1;
printf(" Get the Client Connection Attributes.\n");
/* query client */
sqleqryc(&clientAppInfo[0], 8, &sqlca);
DB2_API_CHECK("Client Conn. Attrs. -- get");
printf(" The Client Connection Attributes are:\n");
switch (clientAppInfo[0].value)
{
case SQL_CONNECT_1:
printf(" SQL_CONNECT_TYPE = SQL_CONNECT_1\n");
break;
case SQL_CONNECT_2:
printf(" SQL_CONNECT_TYPE = SQL_CONNECT_2\n");
break;
default:
break;
}
switch (clientAppInfo[1].value)
{
case SQL_RULES_DB2:
printf(" SQL_RULES = SQL_RULES_DB2\n");
break;
case SQL_RULES_STD:
printf(" SQL_RULES = SQL_RULES_STD\n");
break;
default:
break;
}
switch (clientAppInfo[2].value)
{
case SQL_DISCONNECT_EXPL:
printf(" SQL_DISCONNECT = SQL_DISCONNECT_EXPL\n");
break;
case SQL_DISCONNECT_COND:
printf(" SQL_DISCONNECT = SQL_DISCONNECT_COND\n");
break;
case SQL_DISCONNECT_AUTO:
printf(" SQL_DISCONNECT = SQL_DISCONNECT_EXPL\n");
break;
default:
break;
}
switch (clientAppInfo[3].value)
{
case SQL_SYNC_TWOPHASE:
printf(" SQL_SYNCPOINT = SQL_SYNC_TWOPHASE\n");
break;
case SQL_SYNC_ONEPHASE:
printf(" SQL_SYNCPOINT = SQL_SYNC_ONEPHASE\n");
break;
case SQL_SYNC_NONE:
printf(" SQL_SYNCPOINT = SQL_SYNC_NONE\n");
break;
default:
break;
}
printf(" SQL_MAX_NETBIOS_CONNECTIONS = %d\n",
clientAppInfo[4].value);
switch (clientAppInfo[5].value)
{
case SQL_DEFERRED_PREPARE_NO:
printf(" SQL_DEFERRED_PREPARE = SQL_DEFERRED_PREPARE_NO\n");
break;
case SQL_DEFERRED_PREPARE_YES:
printf(" SQL_DEFERRED_PREPARE = SQL_DEFERRED_PREPARE_YES\n");
break;
case SQL_DEFERRED_PREPARE_ALL:
printf(" SQL_DEFERRED_PREPARE = SQL_DEFERRED_PREPARE_ALL\n");
break;
default:
break;
}
printf(" SQL_CONNECT_NODE = %d\n", clientAppInfo[6].value);
printf(" SQL_ATTACH_NODE = %d\n", clientAppInfo[7].value);
return 0;
} /* ClientConnectionAttrsSetGet */