Поделиться через


Характеристики и тип курсора

Приложение может указать характеристики курсора вместо указания типа курсора (только для пересылки, статического, управляемого набором ключей или динамического). Для этого приложение выбирает прокручиваемость курсора (задав атрибут инструкции SQL_ATTR_CURSOR_SCROLLABLE) и конфиденциальность (задав атрибут инструкции SQL_ATTR_CURSOR_SENSITIVITY) перед открытием курсора в дескрипторе инструкции. Затем драйвер выбирает тип курсора, который наиболее эффективно предоставляет характеристики, запрошенные приложением.

Когда приложение задает любой из атрибутов инструкции SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_SCROLLABLE, SQL_ATTR_CURSOR_SENSITIVITY или SQL_ATTR_CURSOR_TYPE, драйвер вносит все необходимые изменения в другие атрибуты инструкции в этом наборе четырех атрибутов, чтобы их значения оставались согласованными. В результате, когда приложение задает характеристику курсора, драйвер может изменить атрибут, указывающий тип курсора на основе этого неявного выбора; Если приложение указывает тип, драйвер может изменить любой из других атрибутов, чтобы он соответствовал характеристикам выбранного типа. Дополнительные сведения об этих атрибутах инструкции см. в описании функции SQLSetStmtAttr .

Приложение, которое задает атрибуты инструкции, чтобы указать тип курсора и характеристики курсора, рискует получить курсор, который не является наиболее эффективным методом, доступным для этого драйвера соответствия требованиям приложения.

Неявный параметр атрибутов инструкции определяется драйвером, за исключением того, что он должен соответствовать этим правилам:

  • Курсоры, доступные только для перенаправления, никогда не будут прокручиваться; см. определение SQL_ATTR_CURSOR_SCROLLABLE в SQLSetStmtAttr.

  • Нечувствительные курсоры никогда не обновляются (поэтому их параллелизм доступен только для чтения); это основано на определении нечувствительных курсоров в стандарте ISO SQL.

Следовательно, неявный параметр атрибутов инструкции возникает в случаях, описанных в следующей таблице.

Атрибут набора приложений Другие атрибуты, заданные неявно
SQL_ATTR_CONCURRENCY to SQL_CONCUR_READ_ONLY SQL_ATTR_CURSOR_SENSITIVITY to SQL_INSENSITIVE.
SQL_ATTR_CONCURRENCY SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER или SQL_CONCUR_VALUES SQL_ATTR_CURSOR_SENSITIVITY SQL_UNSPECIFIED или SQL_SENSITIVE, как определено драйвером. Он никогда не может быть установлен на SQL_INSENSITIVE, так как нечувствительные курсоры всегда доступны только для чтения.
SQL_ATTR_CURSOR_SCROLLABLE to SQL_NONSCROLLABLE SQL_ATTR_CURSOR_TYPE to SQL_CURSOR_FORWARD_ONLY
SQL_ATTR_CURSOR_SCROLLABLE to SQL_SCROLLABLE SQL_ATTR_CURSOR_TYPE SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN или SQL_CURSOR_DYNAMIC, как указано драйвером. Для него никогда не задано значение SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_SENSITIVITY to SQL_INSENSITIVE SQL_ATTR_CONCURRENCY to SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE to SQL_CURSOR_STATIC.
SQL_ATTR_CURSOR_SENSITIVITY to SQL_SENSITIVE SQL_ATTR_CONCURRENCY SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER или SQL_CONCUR_VALUES, как указано драйвером. Он никогда не имеет значения SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN или SQL_CURSOR_DYNAMIC, как указано драйвером.
SQL_ATTR_CURSOR_SENSITIVITY to SQL_UNSPECIFIED SQL_ATTR_CONCURRENCY SQL_CONCUR_READ_ONLY, SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER или SQL_CONCUR_VALUES, как указано драйвером.

SQL_ATTR_CURSOR_TYPE SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN или SQL_CURSOR_DYNAMIC, как указано драйвером.
SQL_ATTR_CURSOR_TYPE to SQL_CURSOR_DYNAMIC SQL_ATTR_SCROLLABLE to SQL_SCROLLABLE.

SQL_ATTR_CURSOR_SENSITIVITY to SQL_SENSITIVE. (Но только если SQL_ATTR_CONCURRENCY не равно SQL_CONCUR_READ_ONLY. Обновляемые динамические курсоры всегда чувствительны к изменениям, которые были сделаны в собственной транзакции.)
SQL_ATTR_CURSOR_TYPE to SQL_CURSOR_FORWARD_ONLY SQL_ATTR_CURSOR_SCROLLABLE to SQL_NONSCROLLABLE.
SQL_ATTR_CURSOR_TYPE to SQL_CURSOR_KEYSET_DRIVEN SQL_ATTR_SCROLLABLE to SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY SQL_UNSPECIFIED или SQL_SENSITIVE (в соответствии с заданными драйвером критериями, если SQL_ATTR_CONCURRENCY не SQL_CONCUR_READ_ONLY).
SQL_ATTR_CURSOR_TYPE to SQL_CURSOR_STATIC SQL_ATTR_SCROLLABLE to SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY SQL_INSENSITIVE (если SQL_ATTR_CONCURRENCY SQL_CONCUR_READ_ONLY).

SQL_ATTR_SENSITIVITY SQL_UNSPECIFIED или SQL_SENSITIVE (если SQL_ATTR_CONCURRENCY не SQL_CONCUR_READ_ONLY).