SQLGetStmtAttr 函式

符合性
推出版本:ODBC 3.0 標準合規:ISO 92

總結
SQLGetStmtAttr 會回傳目前的語句屬性設定。

Note

關於驅動管理員在 ODBC 3 時將此函式對應的更多資訊。x 應用程式正在與 ODBC 2 搭配使用。x 驅動程式 ,請參閱應用程式向下 相容性的映射替換函式

Syntax

  
SQLRETURN SQLGetStmtAttr(  
     SQLHSTMT        StatementHandle,  
     SQLINTEGER      Attribute,  
     SQLPOINTER      ValuePtr,  
     SQLINTEGER      BufferLength,  
     SQLINTEGER *    StringLengthPtr);  

論點

StatementHandle
[輸入]語句句柄。

Attribute
[輸入]屬性要取回。

ValuePtr
[輸出]指標指向一個緩衝區,回傳屬性中指定的屬性值。

ValuePtrNULL,StringLengthPtr 仍會回傳 ValuePtr 指向緩衝區中可返回的總位元組數(不含字元資料的空終止字元)。

BufferLength
[輸入]如果 Attribute 是 ODBC 定義的屬性,而 ValuePtr 指向字元字串或二進位緩衝區,則這個自變數應該是 *ValuePtr 的長度。 若 Attribute 是 ODBC 定義的屬性,且 *ValuePtr 為整數,則忽略 BufferLength 。 如果 *ValuePtr 中回傳的值是 Unicode 字串(呼叫 SQLGetStmtAttrW 時), BufferLength 參數必須是偶數。

Attribute 是驅動程式定義的屬性,應用程式會透過設定 BufferLength 參數向驅動程式管理器指示屬性的性質。 BufferLength 可以有以下數值:

  • 如果 *ValuePtr 是指向字串的指標,那麼 BufferLength 就是該字串或 SQL_NTS 的長度。

  • 如果 *ValuePtr 是指向二進位緩衝區的指標,應用程式會將 SQL_LEN_BINARY_ATTR(length) 巨集 的結果置入 BufferLength。 這會使 緩衝長度(BufferLength)產生負值。

  • 如果 *ValuePtr 是指向非字元字串或二進位字串的值指標,那麼 BufferLength 應該有 SQL_IS_POINTER。

  • *ValuePtr 包含固定長度的資料型態,則 BufferLength 可視為 SQL_IS_INTEGER 或 SQL_IS_UINTEGER,視情況而定。

StringLengthPtr
[輸出]一個指向緩衝區的指標,用來回傳 *ValuePtr 中可回傳的總位元組數(不含空終端字元)。 若屬性值為字串,且可回傳的位元組數大於或等於 BufferLength,則 *ValuePtr 中的資料會被截斷為 BufferLength 減去一個空終止字元的長度,並由驅動程式進行空終止。

Returns

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR或SQL_INVALID_HANDLE。

Diagnostics

SQLGetStmtAttr 回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,可透過呼叫 SQLGetDiagRec 取得 HandleType 為 SQL_HANDLE_STMT 及 Handle 為 StatementHandleHandle。 下表列出 SQLGetStmtAttr 常見的 SQLSTATE 值,並在此函式的情境中說明每個值;「(DM)」符號會置於驅動程式管理器回傳的 SQLSTATE 描述前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 說明
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
01004 字串數據,右截斷 * ValuePtr 中回傳的資料被截斷為 BufferLength 減去一個零終端字元的長度。 未截斷字串值的長度會以 *StringLengthPtr 回傳。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
24000 無效的數據指標狀態 參數 Attribute SQL_ATTR_ROW_NUMBER且游標未開啟,或游標位於結果集開始前或結束後。
HY000 一般誤差 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 SQLGetDiagRecMessageText 參數中回傳的錯誤訊息描述了錯誤及其原因。
HY001 記憶體配置錯誤 驅動程式無法配置支援執行或完成函式所需的記憶體。
HY010 函式順序錯誤 (DM) 已針對與 StatementHandle 相關聯的連接句柄呼叫異步執行函式。 當呼叫 SQLGetStmtAttr 函式時,這個非同步函式仍在執行中。

(DM) 呼叫 StatementHandle 的異步執行函式,並在呼叫此函式時仍在執行。

(DM) 已針對 StatementHandle 呼叫 SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos,並傳回SQL_NEED_DATA。 在針對所有數據執行中參數或數據行傳送數據之前,會呼叫此函式。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY090 無效的字串或緩衝區長度 (DM) *ValuePtr 是一個字串,BufferLength 小於零,但不等於 SQL_NTS。
HY092 無效屬性/選項識別碼 參數 Attribute 所指定的值,對於驅動程式支援的 ODBC 版本並不適用。
HY109 無效的數據指標位置 屬性 參數SQL_ATTR_ROW_NUMBER ,該列已被刪除或無法擷取。
HY117 聯機因為未知的交易狀態而暫停。 只允許中斷連線和唯讀函式。 (DM) 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式
HYC00 未實作選擇性功能 參數 Attribute 所指定的值是驅動程式支援的 ODBC 版本的有效 ODBC 陳述句屬性,但驅動程式不支援。
HYT01 連線已逾時 在數據源回應要求之前,連線逾時期限已過期。 線上逾時期間是透過 SQLSetConnectAttr 來設定,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驅動程式不支援此函式 (DM) 對應至 StatementHandle驅動程式不支援 函式。

評論

關於語句屬性的一般資訊,請參見 語句屬性

呼叫 SQLGetStmtAttr 時,會在 *ValuePtr 回傳 屬性中指定的陳述式屬性值。 該值可以是 SQLULEN 值,也可以是 null 終止字串。 若值為 SQLULEN 值,部分驅動程式可能只寫入緩衝區的低 32 位元或 16 位元,而保留較高階位元不變。 因此,應用程式應先使用 SQLULEN 緩衝區,並在呼叫此函式前將該值初始化為 0。 此外, BufferLengthStringLengthPtr 參數也未被使用。 若值為空終止字串,應用程式會在 BufferLength 參數中指定該字串的最大長度,驅動程式則回傳該字串在 *StringLengthPtr 緩衝區的長度。

為了讓呼叫 SQLGetStmtAttr 的應用程式能與 ODBC 2 協同運作。x 驅動程式時,呼叫 SQLGetStmtAttr 會映射到 SQLGetStmtOption

以下語句屬性為唯讀,因此可由 SQLGetStmtattr 檢索,但無法由 SQLSetStmtattr 設定:

  • SQL_ATTR_IMP_PARAM_DESC

  • SQL_ATTR_IMP_ROW_DESC

  • SQL_ATTR_ROW_NUMBER

關於可設定與檢索的屬性清單,請參見 SQLSetStmtAttr

如需相關信息 看!
傳回連接屬性的設定 SQLGetConnectAttr 函式
設定連線屬性 SQLSetConnectAttr 函式
設定語句屬性 SQLSetStmtAttr 函式