Поделиться через


Тип буфера данных

Тип данных C буфера задается приложением. При использовании одной переменной это происходит, когда приложение выделяет переменную. С универсальной памятью , то есть память, указываемая указателем типа void, происходит, когда приложение приведение памяти к конкретному типу. Драйвер обнаруживает этот тип двумя способами:

  • Аргумент типа буфера данных. Буферы, используемые для передачи значений параметров и результирующих данных, таких как буфер, привязанный к TargetValuePtr в SQLBindCol, обычно имеют связанный аргумент типа, например аргумент TargetType в SQLBindCol. В этом аргументе приложение передает идентификатор типа C, соответствующий типу буфера. Например, в следующем вызове SQLBindCol значение SQL_C_TYPE_DATE сообщает драйверу, что буфер даты является SQL_DATE_STRUCT:

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

    Дополнительные сведения об идентификаторах типов см . в разделе "Типы данных в ODBC " далее в этом разделе.

  • Предопределенный тип. Буферы, используемые для отправки и извлечения параметров или атрибутов, например буфера, на который указывает аргумент InfoValuePtr в SQLGetInfo, имеют фиксированный тип, который зависит от указанного параметра. Драйвер предполагает, что буфер данных имеет этот тип; это ответственность приложения за выделение буфера этого типа. Например, в следующем вызове SQLGetInfo драйвер предполагает, что буфер является 32-разрядным целым числом, так как это то, что требуется параметру SQL_STRING_FUNCTIONS:

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

Драйвер использует тип данных C для интерпретации данных в буфере.