For executed statements, the SQL Native Client ODBC driver does not visit the server to report the number of columns in a result set. In this case, SQLNumResultCols does not cause a server roundtrip. Like SQLDescribeCol and SQLColAttribute, calling SQLNumResultCols on prepared but not executed statements generates a server roundtrip.
When a Transact-SQL statement or statement batch returns multiple result row sets, it is possible for the number of result set columns to change from one set to another. SQLNumResultCols should be called for each set. When the number of columns changes, the application should rebind data values prior to fetching row results. For more information about handling multiple result set returns, see SQLMoreResults.