Compartilhar via


Tipo de buffer de dados

O tipo de dados C de um buffer é especificado pelo aplicativo. Com uma única variável, isso ocorre quando o aplicativo aloca a variável. Com a memória genérica - ou seja, memória apontada por um ponteiro do tipo void - isso ocorre quando o aplicativo converte a memória para um tipo específico. O driver descobre esse tipo de duas maneiras:

  • Argumento do tipo de buffer de dados. Os buffers usados para transferir valores de parâmetro e dados do conjunto de resultados, como o buffer vinculado a TargetValuePtr no SQLBindCol, geralmente têm um argumento de tipo associado, como o argumento TargetType no SQLBindCol. Nesse argumento, o aplicativo passa o identificador de tipo C que corresponde ao tipo do buffer. Por exemplo, na chamada a seguir para SQLBindCol, o valor SQL_C_TYPE_DATE informa ao driver que o buffer de data é um SQL_DATE_STRUCT:

    SQL_DATE_STRUCT Date;  
    SQLINTEGER  DateInd;  
    SQLBindCol(hstmt, 1, SQL_C_TYPE_DATE, &Date, 0, &DateInd);  
    

    Para obter mais informações sobre identificadores de tipo, consulte a seção Tipos de dados em ODBC , mais adiante nesta seção.

  • Tipo predefinido. Os buffers usados para enviar e recuperar opções ou atributos, como o buffer apontado pelo argumento InfoValuePtr em SQLGetInfo, têm um tipo fixo que depende da opção especificada. O driver assume que o buffer de dados é desse tipo; É responsabilidade do aplicativo alocar um buffer desse tipo. Por exemplo, na seguinte chamada para SQLGetInfo, o driver assume que o buffer é um inteiro de 32 bits porque é isso que a opção SQL_STRING_FUNCTIONS requer:

    SQLUINTEGER StringFuncs;  
    SQLGetInfo(hdbc, SQL_STRING_FUNCTIONS, (SQLPOINTER) &StringFuncs, 0,  
                NULL);  
    

O driver usa o tipo de dados C para interpretar os dados no buffer.