符合性
推出版本: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
[輸出]指標指向一個緩衝區,回傳屬性中指定的屬性值。
若 ValuePtr 為 NULL,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 為 StatementHandle 的 Handle。 下表列出 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。 SQLGetDiagRec 在 MessageText 參數中回傳的錯誤訊息描述了錯誤及其原因。 |
| HY001 | 記憶體配置錯誤 | 驅動程式無法配置支援執行或完成函式所需的記憶體。 |
| HY010 | 函式順序錯誤 | (DM) 已針對與 StatementHandle 相關聯的連接句柄呼叫異步執行函式。 當呼叫 SQLGetStmtAttr 函式時,這個非同步函式仍在執行中。 (DM) 呼叫 StatementHandle 的異步執行函式,並在呼叫此函式時仍在執行。 (DM) 已針對 StatementHandle 呼叫 SQLExecute、SQLExecDirect、SQLBulkOperations 或 SQLSetPos,並傳回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。 此外, BufferLength 和 StringLengthPtr 參數也未被使用。 若值為空終止字串,應用程式會在 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 函式 |