Tipo di buffer di dati
Il tipo di dati C di un buffer viene specificato dall'applicazione. Con una singola variabile, ciò si verifica quando l'applicazione alloca la variabile. Con la memoria generica, ovvero la memoria a cui punta un puntatore di tipo void, si verifica quando l'applicazione esegue il cast della memoria in un particolare tipo. Il driver individua questo tipo in due modi:
Argomento tipo dei buffer di dati. I buffer usati per trasferire i valori dei parametri e i dati del set di risultati, ad esempio il buffer associato a TargetValuePtr in SQLBindCol, in genere hanno un argomento di tipo associato, come l'argomento TargetType in SQLBindCol. In questo argomento, l'applicazione passa l'identificatore del tipo C che corrisponde al tipo del buffer. Ad esempio, nella chiamata seguente a SQLBindCol, il valore SQL_C_TYPE_DATE indica al driver che il buffer Data è un SQL_DATE_STRUCT:
SQL_DATE_STRUCT Date; SQLINTEGER DateInd; SQLBindCol(hstmt, 1, SQL_C_TYPE_DATE, &Date, 0, &DateInd);
Per altre informazioni sugli identificatori di tipo, vedere la sezione Tipi di dati in ODBC, più avanti in questa sezione.
Tipo predefinito. I buffer usati per inviare e recuperare opzioni o attributi, ad esempio il buffer a cui punta l'argomento InfoValuePtr in SQLGetInfo, hanno un tipo fisso che dipende dall'opzione specificata. Il driver presuppone che il buffer dei dati sia di questo tipo; è responsabilità dell'applicazione allocare un buffer di questo tipo. Nella chiamata seguente a SQLGetInfo, ad esempio, il driver presuppone che il buffer sia un numero intero a 32 bit perché è ciò che richiede l'opzione SQL_STRING_FUNCTIONS:
SQLUINTEGER StringFuncs; SQLGetInfo(hdbc, SQL_STRING_FUNCTIONS, (SQLPOINTER) &StringFuncs, 0, NULL);
Il driver usa il tipo di dati C per interpretare i dati nel buffer.