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 函式 |