SQLSetConnectAttr 函式

一致性
引進版本:ODBC 3.0 標準合規性:ISO 92

摘要
SQLSetConnectAttr 會設定管理連線層面的屬性。

注意

如需 Driver Manager 在 ODBC 3*.x* 應用程式使用 ODBC 2*.x* 驅動程式時將此函式對應至哪些資訊,請參閱 對應應用程式回溯相容性的 取代函式。

語法

  
SQLRETURN SQLSetConnectAttr(  
     SQLHDBC       ConnectionHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

引數

ConnectionHandle
[輸入] 連線控制代碼。

屬性
[輸入]要設定的屬性,列在「批註」中。

ValuePtr
[輸入]要與 Attribute 相關聯 之值的指標。 根據 Attribute 的值,ValuePtr 將是不帶正負號的 整數值, 或會指向以 Null 結尾的字元字串。 請注意,Attribute 引數的 整數類型可能不是固定長度,請參閱 Comments 一節以取得詳細資料。

StringLength
[輸入]如果 Attribute 是 ODBC 定義的屬性,而 ValuePtr 指向字元字串或二進位緩衝區,則這個引數應該是 * ValuePtr 的長度。 對於字元字串資料,這個引數應該包含字串中的位元組數目。

如果 Attribute 是 ODBC 定義的屬性,而 ValuePtr 是整數, 則會忽略 StringLength

如果 Attribute 是驅動程式定義的屬性,則應用程式會藉由設定 StringLength 引數,向驅動程式管理員指出屬性的性質。 StringLength 可以具有下列值:

  • 如果 ValuePtr 是字元字串的指標, 則 StringLength 是字串的長度或SQL_NTS。

  • 如果 ValuePtr 是二進位緩衝區的指標,則應用程式會將SQL_LEN_BINARY_ATTR( length ) 宏的結果放在 StringLength 。 這會在 StringLength 放置負值。

  • 如果 ValuePtr 是字元字串或二進位字串以外的值指標, 則 StringLength 的值應該SQL_IS_POINTER。

  • 如果 ValuePtr 包含固定長度的值,則 StringLength 會視需要SQL_IS_INTEGER或SQL_IS_UINTEGER。

傳回

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE或SQL_STILL_EXECUTING。

診斷

SQLSetConnectAttr 傳回SQL_ERROR或SQL_SUCCESS_WITH_INFO時,藉由呼叫 具有 SQL_HANDLE_DBC HandleType ConnectionHandle 控制碼 SQLGetDiagRec ,即可取得相關聯的 SQLSTATE 值。 下表列出 SQLSetConnectAttr 通常傳 回的 SQLSTATE 值,並說明此函式內容中的每個值;標記法 「(DM)」 在驅動程式管理員傳回的 SQLSTATE 描述之前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

驅動程式可以傳回SQL_SUCCESS_WITH_INFO,以提供設定選項結果的相關資訊。

SQLSTATE 錯誤 描述
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
01S02 選項值已變更 驅動程式不支援 ValuePtr 中指定的 值,並取代了類似的值。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
08002 使用中的連線名稱 Attribute 引數已SQL_ATTR_ODBC_CURSORS,且驅動程式已連線至資料來源。
08003 連線未開啟 (DM) 已 指定屬性值 ,需要開啟的連接,但 ConnectionHandle 並未處於線上狀態。
08S01 通訊連結失敗 驅動程式與驅動程式連線的資料來源之間的通訊連結在函式完成處理之前失敗。
24000 不正確資料指標狀態 Attribute 引數已SQL_ATTR_CURRENT_CATALOG,且結果集擱置中。
25000 在本機交易中時不合法的作業 連接是在嘗試在分散式交易連接中登記時,透過設定連接屬性SQL_ATTR_ENLIST_IN_DTC,在本機交易中。

已在 DTC 中登記連線。

已將連線編列在分散式交易連線中,而本機交易的啟動方式是將SQL_ATTR_AUTOCOMMIT設定為 SQL_AUTOCOMMIT_OFF。
3D000 不正確目錄名稱 Attribute 引數SQL_CURRENT_CATALOG,且指定的目錄名稱無效。
HY000 一般錯誤 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 *MessageText 緩衝區中 SQLGetDiagRec 回的錯誤訊息描述錯誤及其原因。
HY001 記憶體配置錯誤 驅動程式無法配置支援執行或完成函式所需的記憶體。
HY008 作業已取消 ConnectionHandle 已啟用 非同步處理。 已呼叫 SQLSetConnectAttr 函式,並在完成執行之前, 在 ConnectionHandle 呼叫 SQLCancelHandle 函式,然後在 ConnectionHandle 上 再次呼叫 SQLSetConnectAttr 函 式。

或者,呼叫 SQLSetConnectAttr 函式,並在完成執行之前, 從多執行緒應用程式中的不同執行緒呼叫 SQLCancelHandle
HY009 不正確 Null 指標使用 Attribute 引數識別出需要字串值的連接屬性,而 ValuePtr 引數是 Null 指標。
HY010 函式順序錯誤 (DM) 針對與 ConnectionHandle 相關聯的 StatementHandle 呼叫 非同步執行函式,並在呼叫 SQLSetConnectAttr 仍在執行。

(DM) 呼叫 ConnectionHandle 的非同步執行函式(不是此函式),而且在呼叫此函式時仍在執行中。

(DM) SQLExecute SQLExecDirect SQLMoreResults 已針對與 ConnectionHandle 相關聯的 其中一個語句控制碼呼叫,並傳回SQL_PARAM_DATA_AVAILABLE。 在擷取所有資料流程參數的資料之前,會呼叫此函式。

(DM) SQLExecute SQLExecDirect SQLBulkOperations SQLSetPos 已針對與 ConnectionHandle 相關聯的 StatementHandle 呼叫 ,並傳回SQL_NEED_DATA。 在針對所有資料執行中參數或資料行傳送資料之前,會呼叫此函式。

(DM) 已針對 ConnectionHandle 呼叫 SQLBrowseConnect ,並傳回SQL_NEED_DATA。 此函式是在 SQLBrowseConnect 傳回SQL_SUCCESS_WITH_INFO或SQL_SUCCESS之前 呼叫的。
HY011 無法立即設定屬性 Attribute 引數已SQL_ATTR_TXN_ISOLATION,且交易已開啟。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY024 不正確屬性值 指定了指定的 屬性值 ,ValuePtr 指定了不正確值。 (Driver Manager 只會針對接受一組離散值的連接和語句屬性傳回此 SQLSTATE,例如SQL_ATTR_ACCESS_MODE或SQL_ATTR_ASYNC_ENABLE。針對所有其他連接和語句屬性,驅動程式必須確認 ValuePtr 中指定的 值。

Attribute 引數是SQL_ATTR_TRACEFILE或SQL_ATTR_TRANSLATE_LIB,而 ValuePtr 是空字串。
HY090 不正確字串或緩衝區長度 (DM) *ValuePtr 是字元字串,而 StringLength 引數小於 0, 但未SQL_NTS。
HY092 不正確屬性/選項識別碼 (DM) 為引數 Attribute 指定的值對驅動程式支援的 ODBC 版本無效。

(DM) 為引數 Attribute 指定的值是唯讀屬性。
HY114 驅動程式不支援連線層級非同步函式執行 (DM) 應用程式嘗試為不支援非同步連接作業的驅動程式啟用非同步函式執行,SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE。
HY117 連線因為未知的交易狀態而暫停。 只允許中斷連線和唯讀函式。 (DM) 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式
HY121 資料指標程式庫和驅動程式感知共用無法同時啟用 如需詳細資訊,請參閱驅動程式感知連接共用
HYC00 未實作選擇性功能 為引數 Attribute 指定的值是驅動程式所支援之 ODBC 版本的有效 ODBC 連接或語句屬性,但驅動程式不支援。
HYT01 已超過連線逾時 在資料來源回應要求之前,連線逾時期限已過期。 連線逾時期間是透過 SQLSetConnectAttr 來設定,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驅動程式不支援此函式 (DM) 與 ConnectionHandle 相關聯的驅動程式不支援 函式。
IM009 無法載入翻譯 DLL 驅動程式無法載入為連接指定的轉譯 DLL。 只有當 Attribute SQL_ATTR_TRANSLATE_LIB 時 ,才會傳回此錯誤。
IM017 在非同步通知模式中停用輪詢 每當使用通知模型時,輪詢就會停用。
IM018 尚未呼叫 SQLCompleteAsync ,以完成此控制碼上的先前非同步作業。 如果控制碼上的上一個函式呼叫傳回SQL_STILL_EXECUTING且啟用通知模式, 則必須在控制碼上呼叫 SQLCompleteAsync ,才能執行後續處理並完成作業。
S1118 驅動程式不支援非同步通知 SQL_ATTR_ASYNC_DBC_EVENT已設定 (連線完成之後),但驅動程式不支援非同步通知。

當 Attribute 是語句屬性時 SQLSetConnectAttr 可以傳回 SQLSetStmtAttr 回的任何 SQLSTATEs。

註解

如需連接屬性的一般資訊,請參閱 連接屬性

本節稍後的表格顯示目前定義的屬性及其引進的 ODBC 版本:預期會定義更多屬性,以利用不同的資料來源。 ODBC 會保留一系列屬性;驅動程式開發人員必須保留值,才能從 Open Group 使用自己的驅動程式特定用途。

注意

在連接層級呼叫 SQLSetConnectAttr 來設定語句屬性的能力已在 ODBC 3*.x* 中已被取代。 ODBC 3*.x* 應用程式不應該在連接層級設定語句屬性。 ODBC 3*.x* 語句屬性不能在連接層級設定,除了SQL_ATTR_METADATA_ID和SQL_ATTR_ASYNC_ENABLE屬性之外,這些屬性都是連接屬性和語句屬性,而且可以在連接層級或語句層級設定。

ODBC 3*.x* 驅動程式只有在應該使用連接層級設定 ODBC 2*.x* 語句選項的 ODBC 2*.x* 應用程式時,才需要支援此功能。 如需詳細資訊,請參閱附錄 G:回溯相容性的驅動程式指導方針中的 SQLSetConnectOption 對應

應用程式可以隨時在配置和釋放連線之間呼叫 SQLSetConnectAttr 。 應用程式為連線成功設定的所有連接和語句屬性都會持續存在,直到 連接上呼叫 SQLFreeHandle 為止。 例如,如果應用程式在連接到資料來源之前呼叫 SQLSetConnectAttr ,即使應用程式連接到資料來源時,驅動程式中的 SQLSetConnectAttr 失敗,屬性仍會保存 ;如果應用程式設定驅動程式特定屬性,即使應用程式連線到連接上的不同驅動程式,屬性仍會保存。

某些連接屬性只能在建立連接之前設定;只有在建立連接之後,才能設定其他專案。 下表指出必須在建立連接之前或之後設定的連線屬性。 兩者 都表示可以在連接之前或之後設定 屬性。

屬性 在連線之前或之後設定?
SQL_ATTR_ACCESS_MODE Either[1]
SQL_ATTR_ASYNC_DBC_EVENT
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE Either[4]
SQL_ATTR_ASYNC_DBC_PCALLBACK
SQL_ATTR_ASYNC_DBC_PCONTEXT
SQL_ATTR_ASYNC_ENABLE Either[2]
SQL_ATTR_AUTO_IPD
SQL_ATTR_AUTOCOMMIT Either[5]
SQL_ATTR_CONNECTION_DEAD 之後
SQL_ATTR_CONNECTION_TIMEOUT
SQL_ATTR_CURRENT_CATALOG Either[1]
SQL_ATTR_DBC_INFO_TOKEN 之後
SQL_ATTR_ENLIST_IN_DTC 之後
SQL_ATTR_LOGIN_TIMEOUT 之前
SQL_ATTR_METADATA_ID
SQL_ATTR_ODBC_CURSORS 之前
SQL_ATTR_PACKET_SIZE 之前
SQL_ATTR_QUIET_MODE
SQL_ATTR_TRACE
SQL_ATTR_TRACEFILE
SQL_ATTR_TRANSLATE_LIB 之後
SQL_ATTR_TRANSLATE_OPTION 之後
SQL_ATTR_TXN_ISOLATION Either[3]

[1] 視驅動程式而定,可以在連接之前或之後設定SQL_ATTR_ACCESS_MODE和SQL_ATTR_CURRENT_CATALOG。 不過,互通的應用程式會在連線前設定之,因為部分驅動程式不支援在連線後予以變更。

[2] SQL_ATTR_ASYNC_ENABLE必須在有使用中語句之前設定。

[3] 只有在連接上沒有開啟的交易時,才能設定 [3] SQL_ATTR_TXN_ISOLATION。 如果資料來源不支援 * ValuePtr 中指定的值,某些連接屬性支援替代類似的值。 在這種情況下,驅動程式會傳回 SQL_SUCCESS_WITH_INFO 和 SQLSTATE 01S02 (選項值已變更)。 例如,如果 Attribute 是SQL_ATTR_PACKET_SIZE且 * ValuePtr 超過封包大小上限,則驅動程式會取代大小上限。 若要判斷替代的值,應用程式會呼叫 SQLGetConnectAttr

[4] 如果在開啟連接之前設定SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE,驅動程式管理員會在呼叫 SQLBrowseConnect、 SQLConnect 或 SQLDriverConnect 期間載入驅動程式時,設定驅動程式的屬性。 在呼叫 SQLBrowseConnect、 SQLConnect SQLDriverConnect 之前,驅動程式管理員不知道要連線到哪個驅動程式,而且不知道驅動程式是否支援非同步連接作業。 因此,驅動程式管理員一律會傳回SQL_SUCCESS。 但是,如果驅動程式不支援非同步連接作業,則呼叫 SQLBrowseConnect、 SQLConnect SQLDriverConnect 將會失敗。

[5] 當SQL_ATTR_AUTOCOMMIT設定為 FALSE 時,如果有任何 API 傳回SQL_ERROR以確保交易一致性,應用程式應該呼叫 SQLEndTran(SQL_ROLLBACK)。

* ValuePtr 緩衝區中設定的資訊格式取決於指定的 屬性 SQLSetConnectAttr 會接受兩種不同格式之一的屬性資訊:以 Null 終止的字元字串或整數值。 屬性的描述中會指出每個 格式。 SQLSetConnectAttr 的 ValuePtr 引數所 指向的 字元字串長度 為 StringLength 位元組。

如果長度是由 屬性所定義,則會忽略 StringLength 引數,如同 ODBC 2*.x* 或更早版本中引進的所有屬性的情況一樣。

屬性 ValuePtr 內容
SQL_ATTR_ACCESS_MODE (ODBC 1.0) SQLUINTEGER 值。 驅動程式或資料來源會使用SQL_MODE_READ_ONLY做為指標,指出連線不需要支援導致更新的 SQL 語句。 此模式可用來優化驅動程式或資料來源適用的鎖定策略、交易管理或其他區域。 驅動程式不需要防止這類語句提交至資料來源。 當系統要求在唯讀連接期間處理非唯讀的 SQL 語句時,驅動程式和資料來源的行為是實作定義的。 SQL_MODE_READ_WRITE是預設值。
SQL_ATTR_ASYNC_DBC_EVENT (ODBC 3.8) SQLPOINTER 值,這是事件控制碼。

使用 SQL_ATTR_ASYNC_STMT_EVENT 屬性呼叫 SQLSetConnectAttr 並指定事件控制碼,即可啟用 非同步函式完成的通知。 注意: 資料指標程式庫不支援通知方法。 如果應用程式嘗試透過 SQLSetConnectAttr 啟用資料指標程式庫,則啟用通知方法時會收到錯誤訊息。
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE (ODBC 3.8) SQLUINTEGER 值,可啟用或停用連接控制碼上所選函式的非同步執行。 如需詳細資訊,請參閱非同步地執行 (輪詢方法)

SQL_ASYNC_DBC_ENABLE_ON = 啟用指定連接相關函式的非同步作業。

SQL_ASYNC_DBC_ENABLE_OFF = (預設值) 停用指定連接相關函式的非同步作業。

設定SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE一律是同步的(也就是說,它永遠不會傳回SQL_STILL_EXECUTING)。

使用 SQL_ATTR_ASYNC_ENABLE 啟用語句作業的非同步執行。
SQL_ATTR_ASYNC_DBC_PCALLBACK (ODBC 3.8) 指向內容結構的 SQLPOINTER 值。

只有驅動程式管理員可以使用這個屬性呼叫驅動程式的 SQLSetStmtAttr 函 式。
SQL_ATTR_ASYNC_DBC_PCONTEXT (ODBC 3.8) 指向內容結構的 SQLPOINTER 值。

只有驅動程式管理員可以使用這個屬性呼叫驅動程式的 SQLSetStmtAttr 函 式。
SQL_ATTR_ASYNC_ENABLE (ODBC 3.0) SQLULEN 值,指定是否以非同步方式執行指定連接上使用 語句呼叫的函式:

SQL_ASYNC_ENABLE_OFF = 停用語句作業的連線層級非同步執行支援(預設值)。

SQL_ASYNC_ENABLE_ON = 啟用語句作業的連接層級非同步執行支援。

您可以設定具有SQL_ASYNC_MODE資訊類型的 SQLGetInfo 是否 傳回SQL_AM_CONNECTION或SQL_AM_STATEMENT。
SQL_ATTR_AUTO_IPD (ODBC 3.0) 唯讀 SQLUINTEGER 值,指定是否支援在呼叫 SQLPrepare 之後自動擴展 IPD:

SQL_TRUE = 驅動程式支援呼叫 SQLPrepare 之後自動擴展 IPD。

SQL_FALSE = 驅動程式不支援呼叫 SQLPrepare 之後自動擴展 IPD。 不支援備妥語句的伺服器將無法自動填入 IPD。

如果傳回SQL_ATTR_AUTO_IPD連接屬性的SQL_TRUE,則可以將語句屬性SQL_ATTR_ENABLE_AUTO_IPD設定為開啟或關閉 IPD 的自動母體擴展。 如果SQL_ATTR_AUTO_IPD為SQL_FALSE,則SQL_ATTR_ENABLE_AUTO_IPD無法設定為 SQL_TRUE。 SQL_ATTR_ENABLE_AUTO_IPD的預設值等於 SQL_ATTR_AUTO_IPD 的值。

SQLGetConnectAttr 可以傳 回此連接屬性,但無法由 SQLSetConnectAttr 設定。
SQL_ATTR_AUTOCOMMIT (ODBC 1.0) SQLUINTEGER 值,指定要使用自動認可或手動認可模式:

SQL_AUTOCOMMIT_OFF = 驅動程式使用手動認可模式,而且應用程式必須使用 SQLEndTran 明確認可或回復交易

SQL_AUTOCOMMIT_ON = 驅動程式使用自動認可模式。 每個語句都會在執行之後立即認可。 這是預設值。 當SQL_ATTR_AUTOCOMMIT設為 SQL_AUTOCOMMIT_ON,以從手動認可模式變更為自動認可模式時,會認可連線上的任何開啟交易。

如需詳細資訊,請參閱 認可模式 重要事項: 某些資料來源會刪除存取計畫,並在每次認可語句時關閉連接上所有語句的資料指標;自動認可模式可能會導致在執行每個非查詢語句或查詢資料指標關閉之後發生。 如需詳細資訊,請參閱 SQLGetInfo 中的 SQL_CURSOR_COMMIT_BEHAVIOR和SQL_CURSOR_ROLLBACK_BEHAVIOR資訊類型,以及 資料指標和備妥語句 的交易效果。

當批次以自動認可模式執行時,可能會有兩件事。 整個批次可以視為可自動認可單位,或批次中的每個語句都會被視為可自動認可單位。 某些資料來源可以支援這兩種行為,而且可能會提供選擇其中一種或另一種方式。 這是驅動程式定義的批次是否被視為可自動認可單位,或批次中的每個個別語句是否可自動認可。
SQL_ATTR_CONNECTION_DEAD

(ODBC 3.5)
表示線上狀態的唯讀 SQLUINTEGER 值。 如果SQL_CD_TRUE,連線已遺失。 如果SQL_CD_FALSE,連線仍為使用中。
SQL_ATTR_CONNECTION_TIMEOUT (ODBC 3.0) SQLUINTEGER 值,對應到連線上等待連線上任何要求完成的秒數,然後再返回應用程式。 驅動程式應該會在與查詢執行或登入無關的情況下逾時,隨時傳回 SQLSTATE HYT00 (逾時過期)。

如果 ValuePtr 等於 0(預設值),則不會逾時。
SQL_ATTR_CURRENT_CATALOG (ODBC 2.0) 包含資料來源所要使用的目錄名稱的字元字串。 例如,在 SQL Server 中,目錄是資料庫,因此驅動程式會將 USE 資料庫 語句傳送 至資料來源,其中 資料庫 是 * ValuePtr 中指定的資料庫。 如果是單層驅動程式,目錄可能是目錄,因此驅動程式會將目前的目錄變更為 * ValuePtr 中指定的目錄。
SQL_ATTR_DBC_INFO_TOKEN (ODBC 3.8 當 SQLRateConnection 的 (* pRating ) 參數不等於 100 時 ,用來將連線資訊權杖設定回 DBC 控制碼的 SQLPOINTER 值。

SQL_ATTR_DBC_INFO_TOKEN僅限設定。 無法使用 SQLGetConnectAttr SQLGetConnectOption 來擷取此值。 驅動程式管理員的 SQLSetConnectAttr 將不會接受SQL_ATTR_DBC_INFO_TOKEN,因為應用程式不應該設定此屬性。

如果驅動程式在設定SQL_ATTR_DBC_INFO_TOKEN之後傳回SQL_ERROR,則只會釋放剛從集區取得的連接。 驅動程式管理員接著會嘗試從集區取得另一個連線。 如需詳細資訊,請參閱 在 ODBC 驅動程式 中開發連線集區感知。
SQL_ATTR_ENLIST_IN_DTC (ODBC 3.0) SQLPOINTER 值,指定是否要在 Microsoft 元件服務協調的分散式交易中使用 ODBC 驅動程式。

傳遞 DTC OLE 交易對象,指定要匯出至 SQL Server 的交易,或SQL_DTC_DONE結束連線的 DTC 關聯。

用戶端會呼叫 Microsoft Distributed Transaction Coordinator (MS DTC) OLE ITransactionDispenser::BeginTransaction 方法來開始 MS DTC 交易,並建立代表交易的 MS DTC 交易對象。 然後,應用程式會使用 SQL_ATTR_ENLIST_IN_DTC 選項呼叫 SQLSetConnectAttr,以將交易對象與 ODBC 連接產生關聯。 所有相關資料庫活動都會在 MS DTC 交易的保護下執行。 應用程式會呼叫具有SQL_DTC_DONE的 SQLSetConnectAttr,以結束連線的 DTC 關聯。 如需詳細資訊,請參閱 MS DTC 文件集。
SQL_ATTR_LOGIN_TIMEOUT (ODBC 1.0) SQLUINTEGER 值,對應至等候登入要求完成的秒數,然後再返回應用程式。 預設值為驅動程式相依。 如果 ValuePtr 為 0,則會停用逾時,且連線嘗試將會無限期等候。

如果指定的逾時超過資料來源中的登入逾時上限,驅動程式會取代該值,並傳回 SQLSTATE 01S02 (選項值已變更)。
SQL_ATTR_METADATA_ID (ODBC 3.0) SQLUINTEGER 值,決定如何處理目錄函式的字串引數。

如果SQL_TRUE,則會將目錄函式的字串引數視為識別碼。 此案例並不重要。 針對非匯入字串,驅動程式會移除任何尾端空格,並將字串折迭成大寫。 若為分隔字串,驅動程式會移除任何前置或尾端空格,並以字面方式接受分隔符號之間的任何內容。 如果其中一個引數設定為 Null 指標,則函式會傳回 SQL_ERROR 和 SQLSTATE HY009 (Null 指標的無效使用)。

如果SQL_FALSE,則目錄函式的字串引數不會被視為識別碼。 此案例相當重要。 視 引數而定,它們可以包含字串搜尋模式。

預設值為 SQL_FALSE。

採用值清單的 SQLTables TableType 引數不會受到此屬性的影響。

您也可以在語句層級上設定SQL_ATTR_METADATA_ID。 (這是唯一也是語句屬性的連接屬性。

如需詳細資訊,請參閱目錄函式中的引數
SQL_ATTR_ODBC_CURSORS (ODBC 2.0) 指定驅動程式管理員如何使用 ODBC 資料指標程式庫的 SQLULEN 值:

SQL_CUR_USE_IF_NEEDED = 驅動程式管理員只有在需要時才使用 ODBC 資料指標程式庫。 如果驅動程式支援 SQLFetchScroll 中的 SQL_FETCH_PRIOR 選項,驅動程式管理員會使用驅動程式的捲動功能。 否則,它會使用 ODBC 資料指標程式庫。

SQL_CUR_USE_ODBC = 驅動程式管理員會使用 ODBC 資料指標程式庫。

SQL_CUR_USE_DRIVER = 驅動程式管理員會使用驅動程式的捲動功能。 這是預設設定。

如需 ODBC 資料指標程式庫的詳細資訊,請參閱 附錄 F:ODBC 資料指標程式庫 警告: 資料指標程式庫將在未來的 Windows 版本中移除。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 Microsoft 建議使用驅動程式的資料指標功能。
SQL_ATTR_PACKET_SIZE (ODBC 2.0) SQLUINTEGER 值,指定以位元組為單位的網路封包大小。 注意: 許多資料來源都不支援此選項,或只能傳回但無法設定網路封包大小。

如果指定的大小超過封包大小上限或小於最小封包大小,驅動程式會取代該值並傳回 SQLSTATE 01S02 (選項值已變更)。

如果應用程式設定連線之後的封包大小,驅動程式會傳回 SQLSTATE HY011 (無法立即設定屬性)。
SQL_ATTR_QUIET_MODE (ODBC 2.0) 視窗控點 (HWND)。

如果視窗控制碼是 Null 指標,驅動程式就不會顯示任何對話方塊。

如果視窗控制碼不是 Null 指標,它應該是應用程式的父視窗控制碼。 這是預設值。 驅動程式會使用此控制碼來顯示對話方塊。 注意: SQL_ATTR_QUIET_MODE連接屬性不適用於 SQLDriverConnect 顯示的對話方塊。
SQL_ATTR_TRACE (ODBC 1.0) SQLUINTEGER 值,告知驅動程式管理員是否要執行追蹤:

SQL_OPT_TRACE_OFF = 追蹤關閉 (預設值)

SQL_OPT_TRACE_ON = 追蹤

當追蹤開啟時,Driver Manager 會將每個 ODBC 函式呼叫寫入追蹤檔案。 注意: 追蹤開啟時,驅動程式管理員可以從任何函式傳回 SQLSTATE IM013 (追蹤檔案錯誤)。

應用程式會指定具有 [SQL_ATTR_TRACEFILE] 選項的追蹤檔案。 如果檔案已經存在,驅動程式管理員會附加至檔案。 否則,它會建立檔案。 如果追蹤已開啟且未指定追蹤檔案,驅動程式管理員就會寫入至 SQL 檔案。登入根目錄中。

應用程式可以設定 ODBCSharedTraceFlag 變數 ,以動態方式啟用追蹤。 接著會針對目前執行的所有 ODBC 應用程式啟用追蹤。 如果應用程式關閉追蹤,它只會針對該應用程式關閉。

如果應用程式呼叫 SQLAllocHandle 具有 handleType 為 SQL_HANDLE_ENV 的 Trace 關鍵字時,系統資訊中的 Trace 關鍵字會設定為 1,則會為所有控制碼啟用追蹤。 它只會針對呼叫 SQLAllocHandle 的應用程式啟用。

使用 SQL_ATTR_TRACE 的 Attribute 呼叫 SQLSetConnectAttr 不需要 ConnectionHandle 引數有效,而且如果 ConnectionHandle 為 Null,則不會傳回SQL_ERROR。 此屬性適用于所有連線。
SQL_ATTR_TRACEFILE (ODBC 1.0) 包含追蹤檔名稱的 Null 終止字元字串。

系統會使用系統資訊中的 TraceFile 關鍵字來指定 SQL_ATTR_TRACEFILE屬性的預設值。 如需詳細資訊,請參閱 ODBC 子機碼

使用 屬性為 SQL_ATTR_TRACEFILE 呼叫 SQLSetConnectAttr 不需要 ConnectionHandle 引數有效,而且如果 ConnectionHandle 無效,則不會傳回 SQL_ERROR。 此屬性適用于所有連線。
SQL_ATTR_TRANSLATE_LIB (ODBC 1.0) 以 Null 結尾的字元字串,包含程式庫的名稱,其中包含 驅動程式存取以執行字元集轉譯等工作的 SQLDriverToDataSource SQLDataSourceToDriver 函式。 只有在驅動程式已連線到資料來源時,才能指定此選項。 此屬性的設定將會跨連線保存。 如需翻譯資料的詳細資訊,請參閱 翻譯 DLL 翻譯 DLL 函數參考
SQL_ATTR_TRANSLATE_OPTION (ODBC 1.0) 傳遞至轉譯 DLL 的 32 位旗標值。 只有當驅動程式已連線到資料來源時,才能指定這個屬性。 如需翻譯資料的相關資訊,請參閱 翻譯 DLL
SQL_ATTR_TXN_ISOLATION (ODBC 1.0) 設定目前連線之交易隔離等級的 32 位元遮罩。 應用程式必須呼叫 SQLEndTran ,才能認可 或回復連線上所有開啟的交易,才能使用此選項呼叫 SQLSetConnectAttr

ValuePtr 的有效值 可以藉由呼叫 InfoType 等於 SQL_TXN_ISOLATION_OPTIONS的 SQLGetInfo 來決定。

如需交易隔離等級的描述,請參閱 SQLGetInfo 交易隔離等級 中 SQL_DEFAULT_TXN_ISOLATION資訊類型的描述。

[1] 只有當描述項是實作描述元,而不是應用程式描述元時,才能以非同步方式呼叫這些函式。

程式碼範例

請參閱 SQLConnect

如需下列資訊 請參閱
配置控制碼 SQLAllocHandle 函式
傳回連接屬性的設定 SQLGetConnectAttr 函式

另請參閱

ODBC API 參考
ODBC 標頭檔