分配语句句柄

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

在应用程序可以执行语句之前,它必须分配语句句柄。 它通过调用 SQLAllocHandle将 HandleType 参数设置为 SQL_HANDLE_STMT)和 InputHandle (指向连接句柄)来执行此操作。

语句属性是语句句柄的特征。 示例语句属性可以包括使用书签以及用于语句结果集的游标类型。 语句属性是使用 SQLSetStmtAttr 设置的,其当前设置是使用 SQLGetStmtAttr 检索的。 不要求应用程序设置任何语句属性;所有语句属性都具有默认值,并且某些语句属性是驱动程序特定的。

使用多个 ODBC 语句和连接选项时,请务必小心。 将 fOption 设置为 SQL_ATTR_LOGIN_TIMEOUT 调用 SQLSetConnectAttr 可控制应用程序等待连接尝试超时而等待建立连接的时间 (0 指定无限等待) 。 响应时间较长的站点可以将此值设置为较高的值,以确保具有充足的时间完成连接。 然而,间隔应始终足够短,这样,当驱动程序无法连接时,可以在合理的时间内向用户提供回复。

fOption 设置为 SQL_ATTR_QUERY_TIMEOUT调用 SQLSetStmtAttr 可设置查询超时间隔,以帮助保护服务器和用户免受长时间运行的查询的影响。

fOption 设置为 SQL_ATTR_MAX_LENGTH调用 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 语句,这会自动生成到服务器的一次附加往返。

另请参阅

执行查询 (ODBC)