在应用程序可以执行语句之前,它必须分配语句句柄。 它通过调用 SQLAllocHandle 并将 HandleType 参数设置为SQL_HANDLE_STMT和指向连接句柄的 InputHandle 来执行此作。
语句属性是语句句柄的特征。 示例语句属性可以包括使用书签和用于语句结果集的游标类型。 语句属性使用 SQLSetStmtAttr 进行设置,并使用 SQLGetStmtAttr 检索其当前设置。 应用程序无需设置任何语句属性;所有语句属性都具有默认值,有些属性特定于驱动程序。
请谨慎使用多个 ODBC 语句和连接选项。 调用设置为 fOption 的 SQLSetConnectAttr SQL_ATTR_LOGIN_TIMEOUT控制应用程序等待连接尝试超时的时间,同时等待建立连接(0 指定无限等待)。 响应时间缓慢的站点可以将此值设置为高,以确保连接有足够的时间完成。 但是,如果驱动程序无法连接,间隔应始终足够低,以在合理的时间内为用户提供响应。
调用将 fOption 设置为 SQL_ATTR_QUERY_TIMEOUT的 SQLSetStmtAttr 设置查询超时间隔,以帮助保护服务器和用户免受长时间运行的查询的影响。
调用设置为 fOption 的 SQLSetStmtAttr SQL_ATTR_MAX_LENGTH限制单个语句可以检索的文本和图像数据量。 调用将 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 语句,这会自动生成到服务器的附加往返。