資料指標特性和資料指標類型

應用程式可以指定資料指標的特性而非型別 (順向、靜態、索引鍵集導向或動態)。 為此,應用程式會先選取資料指標的可捲動性 (設定 SQL_ATTR_CURSOR_SCROLLABLE 陳述式屬性) 和敏感度 (設定 SQL_ATTR_CURSOR_SENSITIVITY 陳述式屬性),再於陳述式控制代碼上開啟資料指標。 接著,驅動程式會選擇最能有效提供應用程式要求之特性的資料指標型別。

只要應用程式設定以下任意陳述式屬性:SQL_ATTR_CONCURRENCY、SQL_ATTR_CURSOR_SCROLLABLE、SQL_ATTR_CURSOR_SENSITIVITY 或 SQL_ATTR_CURSOR_TYPE,驅動程式就會對這整組四個屬性中其他陳述式屬性做出必要變更,使其值保持一致。 因此,只要應用程式指定資料指標特性,驅動程式就能根據這隱含的選取結果變更指定資料指標型別的屬性;應用程式指定型別時,驅動程式則會變更所有其他屬性,以便與所選型別的特性保持一致。 如需這些陳述式屬性的詳細資訊,請參閱 SQLSetStmtAttr 函式說明。

設定陳述式屬性以同時指定資料指標型別及其特性的應用程式,必須承擔獲得該驅動程式上可用的資料指標,但該資料指標可能不是最能有效滿足應用程式需求方法的風險。

陳述式屬性的隱含設定為驅動程式所定義,但其必須遵循以下規則:

  • 順向資料指標一律不可捲動;詳情請見 SQLSetStmtAttr 中的 SQL_ATTR_CURSOR_SCROLLABLE 定義。

  • 非感應式資料指標一律不可更新 (因此其並行性為唯讀);這是根據 ISO SQL 標準中對非感應式資料指標的定義。

因此,陳述式屬性隱含的設定會在下表所述的案例中發生。

應用程式將屬性設定為 其他隱含設定的屬性
SQL_ATTR_CONCURRENCY 設定為 SQL_CONCUR_READ_ONLY SQL_ATTR_CURSOR_SENSITIVITY 設定為 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 設定為 SQL_NONSCROLLABLE SQL_ATTR_CURSOR_TYPE 設定為 SQL_CURSOR_FORWARD_ONLY
SQL_ATTR_CURSOR_SCROLLABLE 設定為 SQL_SCROLLABLE SQL_ATTR_CURSOR_TYPE 設定為 SQL_CURSOR_STATIC、SQL_CURSOR_KEYSET_DRIVEN 或 SQL_CURSOR_DYNAMIC,由驅動程式指定。 一律不會設定為 SQL_CURSOR_FORWARD_ONLY。
SQL_ATTR_CURSOR_SENSITIVITY 設定為 SQL_INSENSITIVE SQL_ATTR_CONCURRENCY 設定為 SQL_CONCUR_READ_ONLY。

SQL_ATTR_CURSOR_TYPE 設定為 SQL_CURSOR_STATIC。
SQL_ATTR_CURSOR_SENSITIVITY 設定為 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 設定為 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 設定為 SQL_CURSOR_DYNAMIC SQL_ATTR_SCROLLABLE 設定為 SQL_SCROLLABLE。

SQL_ATTR_CURSOR_SENSITIVITY 設定為 SQL_SENSITIVE。 (僅適用於 SQL_ATTR_CONCURRENCY 不等於 SQL_CONCUR_READ_ONLY 時。可更新的動態資料指標一律會區分自己交易進行的變更。)
SQL_ATTR_CURSOR_TYPE 設定為 SQL_CURSOR_FORWARD_ONLY SQL_ATTR_CURSOR_SCROLLABLE 設定為 SQL_NONSCROLLABLE。
SQL_ATTR_CURSOR_TYPE 設定為 SQL_CURSOR_KEYSET_DRIVEN SQL_ATTR_SCROLLABLE 設定為 SQL_SCROLLABLE。

SQL_ATTR_SENSITIVITY 設定為 SQL_UNSPECIFIED 或 SQL_SENSITIVE (依照驅動程式定義的準則,SQL_ATTR_CONCURRENCY 不為 SQL_CONCUR_READ_ONLY 時)。
SQL_ATTR_CURSOR_TYPE 設定為 SQL_CURSOR_STATIC SQL_ATTR_SCROLLABLE 設定為 SQL_SCROLLABLE。

SQL_ATTR_SENSITIVITY 設定為 SQL_INSENSITIVE (如果 SQL_ATTR_CONCURRENCY 為 SQL_CONCUR_READ_ONLY)。

SQL_ATTR_SENSITIVITY 設定為 SQL_UNSPECIFIED or SQL_SENSITIVE (如果 SQL_ATTR_CONCURRENCY 不為 SQL_CONCUR_READ_ONLY)。