数据缓冲区类型

缓冲区的 C 数据类型由应用程序指定。 使用单个变量时,应用程序分配变量时会发生此情况。 使用通用内存(即类型为 void 的指针所指向的内存)时,当该应用程序将内存强制转换为特定类型时,会发生此情况。 驱动程序可通过两种方式发现此类型:

  • 数据缓冲区类型参数。 用于传输参数值和结果集数据的缓冲区(如 SQLBindCol 中与 TargetValuePtr 绑定的缓冲区)通常具有关联的类型参数,例如 SQLBindCol 中的 TargetType 参数。 在此参数中,应用程序传递对应于缓冲区类型的 C 类型标识符。 例如,在对 SQLBindCol 的以下调用中,值 SQL_C_TYPE_DATE 告知驱动程序 Date 缓冲区是一个 SQL_DATE_STRUCT:

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

    有关类型标识符的详细信息,请参阅本部分后面的 ODBC 部分中的“数据类型 ”。

  • 预定义类型。 用于发送和检索选项或属性的缓冲区(如 SQLGetInfo中 InfoValuePtr 参数指向的缓冲区)具有依赖于指定选项的固定类型。 驱动程序假定数据缓冲区为此类型;应用程序负责分配此类型的缓冲区。 例如,在对 SQLGetInfo 的以下调用中,驱动程序假定缓冲区是 32 位整数,因为这是SQL_STRING_FUNCTIONS选项所需的内容:

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

驱动程序使用 C 数据类型来解释缓冲区中的数据。