Answer to original question:
include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
and the procedure call:
SQLHANDLE sql_event;
SQLHANDLE sql_connection;
SQLHANDLE sql_statement;
if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sql_event))
goto FINISHED;
if(SQL_SUCCESS!=SQLSetEnvAttr(sql_event,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))
goto FINISHED;
if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_DBC, sql_event, &sql_connection))
goto FINISHED;
SQLCHAR retconstring[1024];
switch(SQLDriverConnect (sql_connection,
NULL,
(SQLCHAR*)connection_string.c_str(),
SQL_NTS,
retconstring,
1024,
NULL,
SQL_DRIVER_NOPROMPT)){
case SQL_SUCCESS_WITH_INFO:
show_error(SQL_HANDLE_DBC, sql_connection);
break;
case SQL_INVALID_HANDLE:
case SQL_ERROR:
show_error(SQL_HANDLE_DBC, sql_connection);
goto FINISHED;
default:
break;
}
if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, sql_connection, &sql_statement))
goto FINISHED;
// Add SQL SQLBindParameter to pass in variables to SP
if(SQL_SUCCESS!=SQLExecDirect(sql_statement, (SQLCHAR*)"{? = CALL spCloseScenario (?)}", SQL_NTS)){
show_error(SQL_HANDLE_STMT, sql_statement);
goto FINISHED;
}
else{
while(SQLFetch(sql_statement)==SQL_SUCCESS){}
if (SQLMoreResults(sql_statement) != SQL_NO_DATA_FOUND){} // SQL Server does not send back the values for the return code or output parameters until the end of all result sets for the procedure. The program variables for a return statement do not hold the output values until SQLMoreResults returns SQL_NO_DATA_FOUND.
}
FINISHED:
SQLFreeHandle(SQL_HANDLE_STMT, sql_statement );
SQLDisconnect(sql_connection);
SQLFreeHandle(SQL_HANDLE_DBC, sql_connection);
SQLFreeHandle(SQL_HANDLE_ENV, sql_event);