SQLSetStmtOption 映射

当应用程序通过 ODBC 3.x 驱动程序调用 SQLSetStmtOption 时,调用

SQLSetStmtOption(StatementHandle, fOption, vParam)  

结果如下所示:

  • 如果 fOption 指示 ODBC 定义的语句属性是字符串,则驱动程序管理器将调用

    SQLSetStmtAttr(StatementHandle, fOption, ValuePtr, SQL_NTS)  
    
  • 如果 fOption 指示返回 32 位整数值的 ODBC 定义的语句属性,则驱动程序管理器将调用

    SQLSetStmtAttr(StatementHandle, fOption, ValuePtr, 0)  
    
  • 如果 fOption 指示驱动程序定义的语句属性,驱动程序管理器将调用

    SQLSetStmtAttr(StatementHandle, fOption, ValuePtr, BufferLength)  
    

在上述三种情况下, StatementHandle 参数设置为 hstmt 中的值, Attribute 参数设置为 fOption 中的值, ValuePtr 参数设置为 vParam 的值。

由于驱动程序管理器不知道驱动程序定义的语句属性需要字符串还是 32 位整数值,因此它必须为 SQLSetStmtAttr 的 StringLength 参数传入有效值。 如果驱动程序已为驱动程序定义的语句属性定义了特殊语义,并且需要使用 SQLSetStmtOption 调用,则它必须支持 SQLSetStmtOption。

如果应用程序调用 SQLSetStmtOption 以在 ODBC 3.x 驱动程序中设置特定于驱动程序的语句选项,并且该选项是在 ODBC 2.x 版本的驱动程序中定义的,则应为 ODBC 3.x 驱动程序中的 选项定义新的清单常量。 如果在调用 SQLSetStmtOption 时使用了旧清单常量,驱动程序管理器将使用 StringLength 参数设置为 0 来调用 SQLSetStmtAttr。

当应用程序调用 SQLSetStmtAttr 以将 SQL_ATTR_USE_BOOKMARKS 设置为 ODBC 3.x 驱动程序中的SQL_UB_ON时,SQL_ATTR_USE_BOOKMARKS 语句属性设置为 SQL_UB_FIXED。 SQL_UB_ON 是与 SQL_UB_FIXED 相同的常量。 驱动程序管理器将SQL_UB_FIXED传递给驱动程序。 SQL_UB_FIXED已在 ODBC 3.x 中弃用,但 ODBC 3.x 驱动程序必须实现它才能与使用固定长度书签的 ODBC 2.x 应用程序一起使用。

对于 ODBC 3.x 驱动程序,驱动程序管理器不再检查 Option 是介于 SQL_STMT_OPT_MIN 与 SQL_STMT_OPT_MAX 之间,还是大于 SQL_CONNECT_OPT_DRVR_START。