Client Interfaces Guide > Connecting to TDV Server through ODBC > Examples Using ODBC to Connect to TDV Server > C++ Example using the Connection URL (DSN-less connection)
 
C++ Example using the Connection URL (DSN-less connection)
The following example shows a small test program written in C++ for Windows that uses this connection URL method. The string “dsn” uses the connection string URL format rather than DSN format. It is used in SQLDriverConnect call to connect to the database.
//
 
#include "stdafx.h"
int SQLSuccess(SQLRETURN rc) {
return (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO);
}
 
void extract_error(const char* sqlFunc, SQLHANDLE handle, SQLSMALLINT type) {
SQLINTEGER i = 0;
SQLINTEGER native;
SQLCHAR state[7];
SQLCHAR text[256];
SQLSMALLINT len;
SQLRETURN ret;
 
memset(state, 0, sizeof(state));
memset(text, 0, sizeof(text));
 
do {
ret = SQLGetDiagRec(type, handle, ++i, state, &native, text, sizeof(text), &len);
if (SQL_SUCCEEDED(ret)) {
printf("%s:%ld:%ld:%s\n", state, i, native, text);
}
} while (ret == SQL_SUCCESS);
exit(0);
}
 
int fetchResultSet(SQLHSTMT stmt)
{
SQLLEN indicator;
SQLRETURN ret;
char buf[512];
SQLSMALLINT columns;
int i=0,rows=0;
 
SQLNumResultCols(stmt, &columns);
//Fetch all data
while(1){
ret = SQLFetch(stmt);
if ( SQL_NO_DATA == ret ){
break;
}else if (!SQLSuccess(ret)) {
extract_error("SQLFetch", stmt, SQL_HANDLE_STMT);
}
rows++;
for(i=1;i<columns;i++){
ret = SQLGetData(stmt, i, SQL_C_CHAR, buf, sizeof(buf), &indicator);
if (!SQLSuccess(ret)) {
extract_error("SQLGetData", stmt, SQL_HANDLE_STMT);
}
}
}
return rows;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
printf("sizeof(SQLULEN)=%d\n",sizeof(SQLULEN));
printf("sizeof(SQLUINTEGER)=%d\n",sizeof(SQLUINTEGER));
printf("sizeof(SQLUSMALLINT)=%d\n",sizeof(SQLUSMALLINT));
SQLRETURN ret;
SQLCHAR tableCat[64];
SQLCHAR tableSchem[64];
SQLCHAR tableName[64];
SQLCHAR tableType[64];
SQLCHAR remarks[64];
SQLLEN Str_Len;
SQLSMALLINT colCount=0;
SQLCHAR dsn[] = "Driver={TDV 8.0};Server=localhost;Port=9401;Domain=composite;dataSource=system;user=admin;password=admin;validateRemoteHostname=false;connectTimeout=3000;enableFastExec=false";
//SQLCHAR query[] ="select pa11.YEAR_ID YEAR_ID,a12.region_id region_id,pa11.call_ctr_id call_ctr_id,pa11.WJXBFS1 WJXBFS1 from ZZMD00 pa11 join LU_CALL_CTR a12 on (pa11.call_ctr_id = a12.call_ctr_id)";
SQLCHAR query[] ="select * from ALL_TABLES";
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
ret = SQLDriverConnect(dbc, NULL, (SQLCHAR*) dsn, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
if (!SQLSuccess(ret)) {
extract_error("SQLDriverConnect", dbc, SQL_HANDLE_DBC);
}
SQLCHAR ver[512];
SQLGetInfo(dbc,
SQL_DRIVER_NAME,
ver,
512,
NULL);
printf("%s\n",ver);
SQLGetInfo(dbc,
SQL_DRIVER_VER,
ver,
512,
NULL);
printf("%s\n",ver);
SQLGetInfo(dbc,
SQL_DBMS_NAME,
ver,
512,
NULL);
printf("%s\n",ver);
SQLGetInfo(dbc,
SQL_DBMS_VER,
ver,
512,
NULL);
printf("%s\n",ver);
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (!SQLSuccess(ret)) {
extract_error("SQLAllocHandle", dbc, SQL_HANDLE_DBC);
}
ret = SQLTables(stmt,(SQLCHAR*)"",0,(SQLCHAR*)"",0,(SQLCHAR*)"",0,(SQLCHAR*)"TABLE",SQL_NTS);
ret= SQLNumResultCols(stmt,&colCount);
ret = SQLBindCol(stmt, 1, SQL_C_CHAR, tableCat, sizeof(tableName), &Str_Len);
ret = SQLBindCol(stmt, 2, SQL_C_CHAR, tableSchem, sizeof(tableName), &Str_Len);
ret = SQLBindCol(stmt, 3, SQL_C_CHAR, tableName, sizeof(tableName), &Str_Len);
ret = SQLBindCol(stmt, 4, SQL_C_CHAR, tableType, sizeof(tableName), &Str_Len);
ret = SQLBindCol(stmt, 5, SQL_C_CHAR, remarks, sizeof(tableName), &Str_Len);
while( (ret=SQLFetch(stmt))==SQL_SUCCESS){
printf("%s\n",tableName);
}
ret = SQLExecDirect(stmt, (SQLCHAR*) query, SQL_NTS);
//ret= SQLPrepareW(stmt,(SQLWCHAR*)query,10);
ret= SQLNumResultCols(stmt,&colCount);
if (!SQLSuccess(ret)) {
extract_error("SQLExecDirect", stmt, SQL_HANDLE_STMT);
}
int totalRows = fetchResultSet(stmt);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
ret = SQLFreeHandle(SQL_HANDLE_DBC, dbc);
ret = SQLFreeHandle(SQL_HANDLE_ENV, env);
printf("Execute query completed, total rows %d.\n",totalRows);
fgetc(stdin);
return 0;
}