應用程式資料庫的唯一性限制式並在asp中捕捉資料庫的錯誤
來源:互聯網
上載者:User
本文中所提到的asp頁面,除特別聲明外,均指<@PAGE LANGUEGE=”VBSCRIPT”>
寫asp與資料庫的結合的程式時,經常會遇到同一資料表中不允許存在重複值的問題,比如使用者註冊程式中不允許出現相同的使用者ID。這樣的情況下,我以前採取的辦法是讀取資料庫中的已存在值,然後與使用者輸入的值比較,如果有相同,則提示已被註冊,須重新填寫。這樣做可以達到預期的目的,但是因為有一次額外的資料庫存取操作,比較浪費資源。
我們都知道,資料表中的列可以設定唯一性限制式,就是從資料庫限制該欄位不允許出現重複值,違反唯一性限制式後,資料庫將返回2627錯誤,提示“違反了 %1! 約束 ''%2!''。不能在對象 ''%4!'' 中插入重複鍵”,這是資料庫的輸出,SQL Server 的所有錯誤都儲存在系統資料表 master.dbo.sysmessages 中。使用者定義的訊息也可以儲存在 sysmessages 中。在asp中調用預存程序的時候,由於預存程序沒有容錯處理,會返回該提示到頁面,並終止語句的執行,@@Error傳回值為0。如果版面設定了容錯,則不會出現錯誤提示,但因為錯誤是資料庫中出現的,所以Err.Number不能得到其錯誤號碼。(也可能是我的資料庫不熟的原因:-),還請大蝦指點)。近日研究ADO,找到了一種更加簡便的方式實現該控制。
ADO(ActiveX Data Objects)被廣泛的用於應用程式與資料庫的串連,asp也可以通過他來實現對資料庫的操作的。ADO 2.1的Connection對象中有一個Error對象,通過它可以捕捉到來自資料庫的錯誤,以在asp頁面中控制。該對象常用的Property有如下幾個,均為唯讀:
Description:字元型,返回來自資料庫的錯誤描述
Source:字元型,錯誤來源
SQLState:字元型,ODBC API(驅動程式管理器)錯誤,SQL Server 2000中對其有如下描述:
SQLSTATE 返回的字串值由兩個字元的類值後接三個字元的子類值組成。類值 01 表明是一種警告,後跟隨 SQL_SUCCESS_WITH_INFO 的傳回碼。只要類值不是 01(IM 除外),則表明是一種錯誤,後跟隨 SQL_ERROR 的傳回碼。類 IM 專門用於表明從 ODBC 實現產生的警告和錯誤。任何類中子類值 000 均用於實現給定類中所定義條件。這種類值和子類值的分配方法由 SQL-92 定義。
跑題了跑題了,回到剛才的話題~~~