/* $Header: 
* 
* Synopsis: Test ODBC application for using prepared statement with bound parameters. 
*           Uses test table.  Modify according to your database. 
*/ 
/*******************************************************************************/ 
#include <stdio.h> 
#include <string.h> 
#include "isql.h" 
#include "isqlext.h" 
/*******************************************************************************/ 
HENV    henv=SQL_NULL_HENV; 
HDBC    hdbc=SQL_NULL_HDBC; 
HSTMT hstmt; 
SQLINTEGER retval = 0; 
int main() 
{ 
    char szDsn[128] ="" , szLogin[25] ="", szPassword[25] = "", name[] = "50", 
        statement[] = "select * from test_table where name = ?"; 
    RETCODE returncode; 
        SDWORD  cbOut; 
        SQLINTEGER cbValue; 
        SQLSMALLINT numParams; 
        UDWORD connAttr; 
        int i; 
        connAttr = SQL_TXN_READ_COMMITTED; 
    system ("clear"); 
    printf("\n Starting Test...\n"); 
    strcpy( szDsn, "ORA8I_SOLARIS"); 
    printf( "\n szDsn = %s", szDsn); 
    strcpy( szLogin, "scott"); 
    printf( "\n szLogin = %s", szLogin); 
    strcpy( szPassword,"tiger"); 
    printf( "\n szPassword = %s\n\n", szPassword); 
    returncode = SQLAllocEnv(&henv); 
    returncode = SQLAllocConnect(henv,&hdbc); 
    if(returncode==SQL_SUCCESS) 
        returncode = SQLConnect(hdbc,(unsigned char *)szDsn,SQL_NTS, 
                    (unsigned char *)szLogin,SQL_NTS, 
                    (unsigned char *)szPassword,SQL_NTS); 
    if(returncode!=SQL_SUCCESS) return 0; 
    cbOut  = SQL_NTS; 
    returncode = SQLAllocStmt(hdbc, &hstmt); 
    SQLSetConnectAttr(hdbc, SQL_TXN_ISOLATION, (SQLPOINTER) connAttr, 255); 
    SQLPrepare(hstmt,statement,SQL_NTS); 
    SQLNumParams(hstmt, &numParams); 
    printf ("Numparams output = %i\n", numParams); 
    SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,4,0,&name,0,&cbOut); 
    /* Bind the column we'll be outputting.  */ 
    SQLBindCol(hstmt,1,SQL_C_CHAR, pwd, 20, &cbOut); 
    /* Execute the statement */ 
    SQLExecute(hstmt); 
    /* Fetch the data */ 
    SQLFetch(hstmt); 
    printf ("pwd (OUTPUT) = %s\n",pwd); 
    printf ("length of pwd = %i\n",strlen(pwd)); 
    SQLFreeStmt(hstmt, SQL_DROP ); 
    SQLDisconnect(hdbc); 
    SQLFreeConnect(hdbc); 
    SQLFreeEnv(henv); 
    printf("\n End of Program\n\n"); 
    return 0; 
} 
int 
DB_Errors (char *where) 
{ 
unsigned char buf[250]; 
unsigned char sqlstate[15]; 
/* 
*  Get statement errors 
*/ 
while (SQLError (henv, hdbc, hstmt, sqlstate, NULL, 
buf, sizeof(buf), NULL) == SQL_SUCCESS) 
{ 
fprintf (stderr, "%s, SQLSTATE=%s\n", buf, sqlstate); 
} 
  /* 
   *  Get connection errors 
   */ 
  while (SQLError (henv, hdbc, SQL_NULL_HSTMT, sqlstate, NULL, 
      buf, sizeof(buf), NULL) == SQL_SUCCESS) 
    { 
      fprintf (stderr, "%s, SQLSTATE=%s\n", buf, sqlstate); 
    } 
  /* 
   *  Get environmental errors 
   */ 
  while (SQLError (henv, SQL_NULL_HDBC, SQL_NULL_HSTMT, sqlstate, NULL, 
      buf, sizeof(buf), NULL) == SQL_SUCCESS) 
    { 
      fprintf (stderr, "%s, SQLSTATE=%s\n", buf, sqlstate); 
    } 
  return -1; 
} 
/*******************************************************************************/ 
/* End of File */