ODBC錯誤處理

2021-09-08 04:21:06 字數 2355 閱讀 9211

odbc 中的錯誤是使用來自每個 odbc 函式呼叫的返回值和 sqlerror 函式或 sqlgetdiagrec 函式的返回值進行報告的。sqlerror 函式用於 odbc 版本 3 之前的版本(但不包括版本 3)。自版本 3 起,已不建議使用 sqlerror 函式,此函式已被 sqlgetdiagrec 函式取代。

每個 odbc 函式都返回乙個 sqlreturn,它是以下狀態**之一:

狀態**

說明sql_success

無錯誤。

sql_success_with_info

該函式完成,但是對 sqlerror 的呼叫將顯示警告。

這種狀態最常見的情況是:返回的值太長,應用程式提供的緩衝區不夠用。

sql_error

函式未完成,因為出現了錯誤。呼叫 sqlerror 可獲取有關此問題的詳細資訊。

sql_invalid_handle

作為引數傳遞的環境、連線或語句控制代碼無效。

如果在釋放控制代碼後再使用該控制代碼,或者控制代碼為空值指標,則通常會發生這種情況。

sql_no_data_found

沒有可用資訊。

使用這種狀態的最常見情況是在從游標進行讀取時,這種狀態表示游標中沒有更多行。

sql_need_data

引數需要資料。

這是一項高階特性,sqlparamdata 和 sqlputdata 下面的 odbc sdk 文件對其作了說明。

每個環境、連線和語句控制代碼都可能有與之相關聯的乙個或多個錯誤或警告。每個對 sqlerror 或 sqlgetdiagrec 的呼叫都會返回有關乙個錯誤的資訊,然後刪除有關該錯誤的資訊。如果您不呼叫 sqlerror 或 sqlgetdiagrec 來刪除所有錯誤,則會在執行下乙個將同一控制代碼作為引數來傳遞的函式呼叫時,刪除這些錯誤。

每個對 sqlerror 的呼叫都會傳遞三個控制代碼,這些控制代碼分別用於環境、連線和語句。第乙個呼叫使用 sql_null_hstmt 獲取與連線相關聯的錯誤。同樣,使用 sql_null_dbc 和 sql_null_hstmt 的呼叫將獲取任何與環境控制代碼相關聯的錯誤。

每個對 sqlgetdiagrec 的呼叫將傳遞環境、連線或語句控制代碼。第乙個呼叫傳遞控制代碼型別 sql_handle_dbc 以獲取與連線關聯的錯誤。第二個呼叫傳遞控制代碼型別 sql_handle_stmt,以獲取與剛執行的語句相關聯的錯誤。

如果有要報告的錯誤(不是 sql_error),sqlerror 和 sqlgetdiagrec 將返回 sql_success;如果沒有其它要報告的錯誤,則將返回 sql_no_data_found。

以下**段使用了 sqlerror,並返回**:

/* declare required variables */

sqlhdbc dbc;

sqlhstmt stmt;

sqlreturn retcode;

uchar errmsg[100];

/* code omitted here */

retcode = sqlallochandle(sql_handle_stmt, dbc, &stmt );

if( retcode == sql_error )

/* delete items for order 2015 */

retcode = sqlexecdirect( stmt,

"delete from salesorderitems where id=2015",

sql_nts );

if( retcode == sql_error )

以下**段使用了 sqlgetdiagrec,並返回**:

/* declare required variables */

sqlhdbc dbc;

sqlhstmt stmt;

sqlreturn retcode;

sqlsmallint errmsglen;

sqlinteger errnative;

uchar errmsg[255];

uchar errstate[5];

/* code omitted here */

retcode = sqlallochandle(sql_handle_stmt, dbc, &stmt );

if( retcode == sql_error )

/* delete items for order 2015 */

retcode = sqlexecdirect( stmt,

"delete from salesorderitems where id=2015",

sql_nts );

if( retcode == sql_error )

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...

MySql錯誤處理(三) 錯誤處理的例子

mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...

PHP 錯誤處理

在 php 中,預設的錯誤處理很簡單。一條訊息會被傳送到瀏覽器,這條訊息帶有檔名 行號以及一條描述錯誤的訊息。在建立指令碼和 web 應用程式時,錯誤處理是乙個重要的部分。如果您的 缺少錯誤檢測編碼,那麼程式看上去很不專業,也為安全風險敞開了大門。本教程介紹了 php 中一些最為重要的錯誤檢測方法。...