SQLDescribeCol 和 SQLColAttribute

SQLDescribeColSQLColAttribute 用于检索结果集元数据。 这两个函数之间的差异是 SQLDescribeCol 始终返回相同的五项信息(列的名称、数据类型、精度、小数位数和可为空),而 SQLColAttribute 返回应用程序请求的单项信息。 但是, SQLColAttribute 可以返回更丰富的元数据选择,包括列的区分大小、显示大小、可更新性和可搜索性。

许多应用程序(尤其是仅显示数据的应用程序)只需要 SQLDescribeCol 返回的元数据。 对于这些应用程序,使用 SQLDescribeColSQLColAttribute 更快,因为信息是在单个调用中返回的。 其他应用程序(尤其是更新数据的应用程序)需要 SQLColAttribute 返回的其他元数据,因此使用这两个函数。 此外, SQLColAttribute 还支持特定于驱动程序的元数据;有关详细信息,请参阅 Driver-Specific 数据类型、描述符类型、信息类型、诊断类型和属性

应用程序可以在准备好或执行语句后以及关闭结果集上的游标之前随时检索结果集元数据。 极少数应用程序需要在语句准备好之后以及执行之前的这个阶段使用结果集元数据。 如果可能,应用程序应等待检索元数据,直到执行语句后,因为某些数据源无法返回已准备语句的元数据,并且模拟驱动程序中的此功能通常是一个缓慢的过程。 例如,驱动程序可以通过将 SELECT 语句的 WHERE 子句替换为 WHERE 1 = 2 并执行生成的语句来生成零行结果集。

从数据源检索元数据通常很昂贵。 因此,只要结果集上的游标处于打开状态,驱动程序应缓存从服务器检索到的任何元数据并保留该元数据。 此外,应用程序应仅请求绝对需要的元数据。