P wrote:
Hi Knut,
Here's the code. It's based on the example found on
There are a few problems here:
db2CfgParam cfgParameters[2]; /* to save the DB Config. */
db2Cfg cfgStruct;
/* initialize cfgStruct */
cfgStruct.numItems = 2;
cfgStruct.paramArray = cfgParameters;
cfgStruct.flags = db2CfgDatabase | db2CfgDelayed;
You TSM_OWNER and MAX_CONNECTIONS are DBM CFG parameter and not DB CFG
parameter. This is the reason why you got no results.
cfgStruct.dbname = dbName;
cfgStruct.paramArray[0].flags = 0;
cfgStruct.paramArray[0].token = SQLF_DBTN_TSM_OWNER;
cfgStruct.paramArray[0].ptrvalue = (char *)malloc(sizeof(char) * 65);
cfgStruct.paramArray[1].flags = 0;
cfgStruct.paramArray[1].token = SQLF_KTN_MAX_CONNECTIONS;
cfgStruct.paramArray[1].ptrvalue = (char *)malloc(sizeof(sqluint32));
MAX_CONNECTIONS is a signed integer: http://tinyurl.com/mvwk9 If you
interpret it as unsigned, you're bound to get wrong results.
db2CfgGet(db2Version810, (void *)&cfgStruct, &db2ConnArea);
The cast to "void *" is unneccessary.
printf(" TSM owner = %s\n", cfgParameters[0].ptrvalue);
printf(" maxconn = %u\n",
*(sqluint32 *)(cfgParameters[1].ptrvalue));
Fixing the above issues should do it. Here is a working example that I
used. It also uses a variable for the result of MAX_CONNECTIONS and, thus,
avoids the ugly cast.
-----------------------------------------------------------------
#include "db2ApiDf.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
db2CfgParam cfgParameters[2]; /* to save the DB Config. */
db2Cfg cfgStruct;
sqlint32 maxConn = 0;
SQL_API_RC rc = SQL_RC_OK;
struct sqlca sqlca;
memset(&cfgParameters, 0x00, sizeof cfgParameters);
memset(&cfgStruct, 0x00, sizeof cfgStruct);
memset(&sqlca, 0x00, sizeof sqlca);
/* initialize cfgStruct */
cfgStruct.numItems = 2;
cfgStruct.paramArray = cfgParameters;
cfgStruct.flags = db2CfgDatabaseManager | db2CfgDelayed;
cfgStruct.dbname = "test";
cfgStruct.paramArray[0].flags = 0;
cfgStruct.paramArray[0].token = SQLF_DBTN_TSM_OWNER;
cfgStruct.paramArray[0].ptrvalue = (char *)malloc(sizeof(char) * 65);
cfgStruct.paramArray[1].flags = 0;
cfgStruct.paramArray[1].token = SQLF_KTN_MAX_CONNECTIONS;
cfgStruct.paramArray[1].ptrvalue = (char *)&maxConn;
if (!cfgStruct.paramArray[0].ptrvalue) {
free(cfgStruct.paramArray[0].ptrvalue);
fprintf(stderr, "Memory allocation failure.\n");
return EXIT_FAILURE;
}
rc = db2CfgGet(db2Version810, &cfgStruct, &sqlca);
if (rc != SQL_RC_OK) {
fprintf(stderr, "Could not get DB CFG. rc = %d\n", rc);
return EXIT_FAILURE;
}
else if (sqlca.sqlcode != SQL_RC_OK) {
fprintf(stderr, "Could not get DB CFG. SQLCODE = %d\n",
sqlca.sqlcode);
return EXIT_FAILURE;
}
printf(" TSM owner = %s\n", cfgParameters[0].ptrvalue);
printf(" maxconn = %d\n", (int)maxConn);
return EXIT_SUCCESS;
}
-----------------------------------------------------------------
--
Knut Stolze
DB2 Information Integration Development
IBM Germany