Wednesday, December 17, 2008

Sample ODBC Program for SQLTables

int main()
{
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLRETURN retcode;
SQLRETURN rc;
SQLINTEGER cbStatus = SQL_NTS;
SQLCHAR szDB[20],szOwner[20],szObject[20],szObjType[20];
char szcDB[20],szcOwner[20],szcObject[20],szcObjType[20];
char szDSN[30],szUserId[20],szPwd[20];
SQLCHAR SqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT MsgLen;
char conBuf[2400]={'\0'};
char conStr[100]={'\0'};
int count=0;

retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLCHAR buf[1024];
SQLSMALLINT len;
/* Reading ODBC DSN , USER and PASSWORD Details*/
printf("\n Enter the ODBC DSN:");
scanf("%s",&szDSN);
printf("\n Enter the UserId:");
scanf("%s",&szUserId);
printf("\n Enter the Password:");
scanf("%s",&szPwd);

/* Construct Connection String*/
strcat(conStr,"DSN=");
strcat(conStr,szDSN);
strcat(conStr,";UID=");
strcat(conStr,szUserId);
strcat(conStr,";PWD=");
strcat(conStr,szPwd);
strcat(conStr,";");


retcode = SQLDriverConnect(hdbc,NULL, (SQLCHAR*) conStr, SQL_NTS,
(SQLCHAR*)buf, 1024,&len,SQL_DRIVER_NOPROMPT);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
strcpy(conBuf,(char *)buf);
printf("\n Connection Details %s",conBuf);
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("\n Enter the database:");
scanf("%s",&szcDB);
printf("\n Enter the owner:");
scanf("%s",&szcOwner);
printf("\n Enter the Object Name:");
scanf("%s",&szcObject);

strcpy((char*)szDB,szcDB);
strcpy((char*)szOwner,szcOwner);
strcpy((char*)szObject,szcObject);
strcpy((char*)szObjType,"TABLE,VIEW");

retcode = SQLTables(hstmt,szDB,SQL_NTS,szOwner,SQL_NTS,szObject,SQL_NTS,szObjType,SQL_NTS);

if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
{
printf("SQLTables Failure");
}
else{
retcode = SQLFetch( hstmt );
while(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
count= count+1;
retcode = SQLFetch( hstmt );
}
if(count>0)
printf("%s exist in %s",szObject,szDB);
else
printf("%s doesn't exist in %s",szObject,szDB);

}


SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}

SQLDisconnect(hdbc);
}
else
{
printf("\n Check yourODBC datasource and userid/password details");
if( (rc = SQLGetDiagRec(SQL_HANDLE_ENV, henv, 1, SqlState, &NativeError,
Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA)
printf("\n Error %s SQLSTATE: %s, NativeError: %d",Msg,SqlState,NativeError);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
exit(255);
}

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}

}

SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
getch();
return 0;
}

Related

No comments: