分配语句句柄
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)
在应用程序可以执行语句之前,它必须分配语句句柄。 它通过将 HandleType 参数设置为SQL_HANDLE_STMT和指向连接句柄的 InputHandle 调用 SQLAllocHandle 来执行此操作。
语句属性是语句句柄的特征。 示例语句属性可以包括使用书签以及用于语句结果集的游标类型。 语句属性使用 SQLSetStmtAttr 进行设置,并使用 SQLGetStmtAttr 检索其当前设置。 不要求应用程序设置任何语句属性;所有语句属性都具有默认值,并且某些语句属性是驱动程序特定的。
使用多个 ODBC 语句和连接选项时,请务必小心。 调用设置为 fOption 的 SQLSetConnectAttr SQL_ATTR_LOGIN_TIMEOUT控制应用程序在等待建立连接时尝试超时的时间(0 指定无限等待)。 响应时间较长的站点可以将此值设置为较高的值,以确保具有充足的时间完成连接。 然而,间隔应始终足够短,这样,当驱动程序无法连接时,可以在合理的时间内向用户提供回复。
将 SQLSetStmtAttr 与 fOption 设置为SQL_ATTR_QUERY_TIMEOUT设置查询超时间隔,以帮助保护服务器和用户免受长时间运行的查询的影响。
调用设置为 SQL_ATTR_MAX_LENGTH fOption 的 SQLSetStmtAttr 将限制单个语句可以检索的文本和图像数据量。 调用将 fOption 设置为 SQL_ATTR_MAX_ROWS 的 SQLSetStmtAttr 还会将行集限制为前 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 语句,这会自动生成到服务器的一次附加往返。