SQLCancelHandle 函式

一致性
引進的版本:ODBC 3.8 標準合規性:無

預期大部分的 ODBC 3.8(及更新版本)驅動程式都會實作此函式。 如果驅動程式未執行,在 Handle 參數中使用 連接控制碼呼叫 SQLCancelHandle 將會傳回SQL_ERROR具有 IM001 的 SQLSTATE,且訊息 「驅動程式不支援此函式」''使用語句控制碼對 SQLCancelHandle 的呼叫 ,因為 Handle 參數會對應至 Driver Manager 對 SQLCancel 的呼叫 ,而且如果驅動程式實作 SQLCancel ,則可以處理。 應用程式可以使用 SQLGetFunctions 來判斷驅動程式是否支援 SQLCancelHandle

摘要
SQLCancelHandle 會取消連接或語句上的處理。 驅動程式管理員會將 SQLCancelHandle 的呼叫 對應至在 HandleType SQL_HANDLE_STMT時 呼叫 SQLCancel

語法

  
SQLRETURN SQLCancelHandle(  
      SQLSMALLINT  HandleType,  
      SQLHANDLE    Handle);  

引數

HandleType
[輸入]要進行 cacel 處理之控制碼的類型。 有效值為SQL_HANDLE_DBC或SQL_HANDLE_STMT。

Handle
[輸入]要取消處理的控制碼。

如果控制代碼並非 HandleType 指定型別的有效控制代碼,SQLCancelHandle 會傳回 SQL_INVALID_HANDLE。

傳回

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR或SQL_INVALID_HANDLE。

診斷

SQLCancelHandle 傳回SQL_ERROR或SQL_SUCCESS_WITH_INFO時,可以使用SQL_HANDLE_STMT的 HandleType 呼叫 SQLGetDiagRec ,以及語句句 柄句 柄或 SQL_HANDLE_DBC的 HandleType 和連接控制碼控制碼 來取得 相關聯的 SQLSTATE 值。

下表列出 SQLCancelHandle 通常傳 回的 SQLSTATE 值,並說明此函式內容中的每個值;標記法 「(DM)」 在驅動程式管理員傳回的 SQLSTATE 描述之前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 描述
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
HY000 一般錯誤 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 引數 *MessageText 緩衝區中 SQLGetDiagRec 回的錯誤訊息會描述錯誤及其原因。
HY001 記憶體配置錯誤 驅動程式無法配置支援執行或完成函式所需的記憶體。
HY010 函式順序錯誤 已針對與 Handle 相關聯的 其中一個語句控制碼呼叫非同步執行的語句相關函式,而 HandleType 已設定為SQL_HANDLE_DBC。 呼叫 SQLCancelHandle ,非同步函式仍在執行中。

(DM) HandleType 引數已SQL_HANDLE_STMT;在相關聯的連接控制碼上呼叫非同步執行函式;而且呼叫此函式時仍會執行函式。

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

已針對 ConnectionHandle 呼叫 SQLBrowseConnect ,並傳回SQL_NEED_DATA。 此函式是在流覽程式完成之前呼叫的。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY092 不正確屬性/選項識別碼 HandleType 已設定為 SQL_HANDLE_ENV 或 SQL_HANDLE_DESC。
HY117 連線因為未知的交易狀態而暫停。 只允許中斷連線和唯讀函式。 (DM) 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式
HYT01 已超過連線逾時 在資料來源回應要求之前,連線逾時期限已過期。 連線逾時期間是透過 SQLSetConnectAttr 來設定,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驅動程式不支援此函式 (DM) 與 Handle 相關聯的驅動程式不支援 函式。

如果 呼叫 SQLCancelHandle HandleType 設定為 SQL_HANDLE_STMT,它可以傳回 SQLCancel 函式可傳 回的任何 SQLSTATE。

註解

此函式類似于 SQLCancel ,但可能會採用連接或語句控制碼做為參數,而不只是語句控制碼。 驅動程式管理員會將 SQLCancelHandle 的呼叫 對應至在 HandleType SQL_HANDLE_STMT時 呼叫 SQLCancel 這可讓應用程式使用 SQLCancelHandle 取消語句作業,即使驅動程式未實 作 SQLCancelHandle 也一樣。

如需取消語句作業的詳細資訊,請參閱 SQLCancel 函式

如果處理 對 SQLCancelHandle 呼叫沒有進行 中的作業,則沒有任何作用。

連接控制碼上的 SQLCancelHandle 可以取消下列類型的處理:

  • 在連接上以非同步方式執行的函式。

  • 在另一個執行緒的連接控制碼上執行的函式。

呼叫 SQLCancelHandle 以取消在連線中以非同步方式執行的函式時 ,SQLCancelHandle 張貼的診斷記錄會附加至取消作業所傳回的診斷記錄: 不過,當取消在另一個執行緒上的連接上執行的函式時,SQLCancelHandle 不會傳回診斷記錄。

使用 SQLCancelHandle 取消 SQLEndTran 可能會使連線處於暫停狀態。 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式

注意

如需如何在將在 Windows 7 之前的 Windows 作業系統上部署之應用程式中使用 SQLCancelHandle 的詳細資訊,請參閱 相容性矩陣

如果函式傳回SQL_STILL_EXECUTING,應用程式可以呼叫 SQLCancelHandle 來取消作業。 如果取消要求成功, SQLCancelHandle 會傳回SQL_SUCCESS。 這並不表示原始函式已取消;指出已處理取消要求。 驅動程式和資料來源會判斷作業何時或何時取消。 應用程式必須繼續呼叫原始函式,直到傳回碼未SQL_STILL_EXECUTING為止。 如果原始函式已取消,傳回碼會SQL_ERROR且 SQLSTATE HY008(作業已取消)。 如果原始函式完成正常處理(未取消),如果原始函式失敗,傳回碼會SQL_SUCCESS或SQL_SUCCESS_WITH_INFO,或SQL_ERROR和 HY008 以外的 SQLSTATE(作業已取消)。

取消在另一個執行緒上執行的函式

在多執行緒應用程式中,應用程式可以取消在另一個執行緒上執行的作業。 若要取消作業,應用程式會使用函式所使用的控制碼呼叫 SQLCancelHandle ,但在不同的執行緒上。 驅動程式和作業系統會決定如何取消作業。 SQLCancelHandle 回碼會指出驅動程式是否已處理要求、傳回SQL_SUCCESS或SQL_ERROR(未傳回診斷資訊)。 如果取消對原始函式的處理,原始函式會傳回 SQL_ERROR 和 SQLSTATE HY008 (作業已取消)。

如果在另一個執行緒上呼叫 SQLCancelHandle 來取消函式時 執行函式,則函式可能會成功並傳回SQL_SUCCESS,然後取消才會生效。 如果 SQLCancelHandle 之前 完成的作業能夠取消作業,則對 SQLCancelHandle 的呼叫 沒有任何作用。

如需下列資訊 請參閱
取消以非同步方式在語句控制碼上執行的函式、取消需要資料的語句上的函式,或取消在另一個執行緒上語句上執行的函式。 SQLCancel 函式

另請參閱

ODBC API 參考
ODBC 標頭檔
非同步執行 (輪詢方法)