Condividi tramite


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.