分配语句句柄
在应用程序可以执行语句之前,它必须分配语句句柄。 为此,它调用 SQLAllocHandle,并将 HandleType 参数设置为 SQL_HANDLE_STMT 且将 InputHandle 指向连接句柄。
语句属性是语句句柄的特征。 示例语句属性可以包括使用书签以及用于语句结果集的游标类型。 语句属性通过SQLSetStmtAttr 设置,其当前设置通过使用 SQLGetStmtAttr 检索。 不要求应用程序设置任何语句属性;所有语句属性都具有默认值,并且某些语句属性是驱动程序特定的。
使用多个 ODBC 语句和连接选项时,请务必小心。 调用 SQLSetConnectAttr 且 fOption 设置为 SQL_ATTR_LOGIN_TIMEOUT 时,可以控制应用程序在等待建立连接时,连接尝试超时之前等待的时间(0 指定无限制等待)。 响应时间较长的站点可以将此值设置为较高的值,以确保具有充足的时间完成连接。 然而,间隔应始终足够短,这样,当驱动程序无法连接时,可以在合理的时间内向用户提供回复。
调用 SQLSetStmtAttr 且 fOption 设置为 SQL_ATTR_QUERY_TIMEOUT 时,可设置查询超时间隔,以帮助防止服务器和用户执行长时间运行的查询。
调用 SQLSetStmtAttr 且 fOption 设置为 SQL_ATTR_MAX_LENGTH 时,可限制单独语句可以检索的 text 和 image 数据的数据量。 调用 SQLSetStmtAttr 且 fOption 设置为 SQL_ATTR_MAX_ROWS 时,还可以将行集限制为前 n 行(如果这是应用程序要求的所有内容)。 请注意,设置 SQL_ATTR_MAX_ROWS 会导致驱动程序向服务器发出 SET ROWCOUNT 语句。 这会影响所有 Microsoft SQL Server 语句,包括触发器和更新。
当您设置这些选项时,请务必小心。 最好是连接句柄中的所有语句句柄对于 SQL_ATTR_MAX_LENGTH 和 SQL_ATTR_MAX_ROWS 都具有相同的设置。 如果驱动程序从一个语句句柄切换到另一个对于这些选项具有不同值的语句句柄,则驱动程序必须生成适当的 SET TEXTSIZE 和 SET ROWCOUNT 语句以更改这些设置。 驱动程序无法将这些语句与用户 SQL 语句放在相同的批中,因为用户 SQL 语句可能包含必须为批中第一条语句的语句。 驱动程序必须在单独的批中发送 SET TEXTSIZE 和 SET ROWCOUNT 语句,这会自动生成到服务器的一次附加往返。