六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

應用數據庫的唯一性約束并在asp中捕捉數據庫的出錯

[摘要]本文中所提到的asp頁面,除特別聲明外,均指<@PAGE LANGUEGE=”VBSCRIPT”>寫asp與數據庫的結合的程序時,經常會遇到同一數據表中不允許存在重復值的問題,比如用戶注...
本文中所提到的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 定義。
跑題了跑題了,回到剛才的話題~~~
Number:返回與錯誤相關聯的數字值,是一個 32 位的值。較高的 16 位字是設施代碼,而較低的字才是真正的錯誤代碼。
NativeError:這就是我們今天要用到的,MSDN對他的描述是:
The NativeError property on a Error(是不是M$的BUG?我英語不及格:-))object indicates the provider-specific error code for a given Error object. This property returns a a Long value that indicates the error code.
還有HelpFile和Helpcontext,都是有關幫助的,這里就不詳述了。
在這里我們用到了NativeError,用它來捕捉來自數據庫的錯誤,他返回了該錯誤的編號。源程序片斷如下:
<%ON ERROR RESUME NEXT 'VBSCRIPT的容錯
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")

Conn.Open"DSN=BBII; UID=sa; PWD="
SQL="Exec ch_insNovel 'd','22','33','44','55'"
'SQL = "Insert Into Novel (Name,Author,yy,ee)VALUES('nn','ee','jj')",與上句效果是一樣的
RS.Open SQL,Conn
If Conn.Errors.Count = 0 Then'判斷錯誤的個數
IsSucc = " 成功 "'
Else
select case Conn.Errors.Item(0).NativeError
case 2627
IsSucc = "ddddddd" '你可以根據需要,定義多個自己的錯誤返回值
End Select
End if
Response.Write "<br>:::"&IsSucc
%>
注意select case…一句中的“Conn.Errors.Item(0).NativeError”,返回一組item中的第一個。在我們這個例子當中,伴隨2627措促同時發生的是“語句已終止”(3621),嚴格來講,他不是錯誤,而是一般性警告(嚴重級別=10)。所以我們需要用來判斷的是第一個錯誤,當然,你可以定義i = i + 1來查看所有發生的錯誤。這樣,我們就能夠知道來自SQL Server的錯誤的具體內容,可以更容易的控制了。

附:錯誤編號
<!—ErrLp.asp-->
<%ON ERROR RESUME NEXT
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={SQL Server}; Server=127.0.0.1; database=master; UID=sa; pwd="
set rs = Server.CreateObject("ADODB.RecordSet")
SQL = "Select * From sysmessages Where msglangid = 2052 Order By error"
rs.open sql,conn,3,2
PAGE = CLng(REQUEST("txtpage"))
RS.PageSize = 100
If PAGE < 1 Then PAGE = 1
If PAGE > RS.PageCount Then PAGE = RS.PageCount
RS.AbsolutePage = PAGE
%>
<style>
td
{
font-family: Verdana;
font-size: 10pt;
}
</style>
<Div>
<FORM METHOD="GET">
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#999999">
<TR>
<TD width="100">總計數:<%=RS.RecordCount%></td>
<TD width="80">總頁數:<%=RS.PageCount%></TD>
<TD width="90">目前頁次:<%=page%></TD>
<TD width="80">轉到<INPUT TYPE="text" NAME="txtpage" SIZE="2" style="font-family: Verdana; font-size: 8pt; border-style: solid; border-width: 1">頁</TD>
<TD width="60">
<%
If page <> 1 Then
Response.Write"<a href=ErrorLp.asp?txtpage=1>第一頁</a>"%> </TD>
<TD width="60">
<%Response.Write"<a href=ErrorLp.asp?txtpage="&(page - 1)&">上一頁</a>"%> </TD>
<%
End If

If page <>RS.PageCount Then%>
<TD width="60">
<%Response.Write"<a href=ErrorLp.asp?txtpage="&(page + 1)&">下一頁</a>"%> </TD>
<TD width="70"><%Response.Write"<a href=ErrorLp.asp?txtpage="&RS.PageCount&">最后一頁</a>"
End If
%>
</TD>
<TD> </TD>
</TR>
</TABLE>
</FORM>
</DIV>
<p>
<DIV>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="1" WIDTH="100%" bordercolor="#999999">
<TR>
<TD>錯誤號</TD>
<TD>嚴重級別</TD>
<TD>DLEVEL</TD>
<TD>信息</TD>
</TR>

<%For ipage = 1 To RS.PageSize%>

<TR onmouseOver="javascript:this.style.background='#dddddd';" onmouseOut="javascript:this.style.background='';">
<TD><%=RS("error")%></TD>
<TD><%=RS("severity")%></TD>
<TD><%=RS("dlevel")%></TD>
<TD><%=RS("description")%></TD>
</TR>
<% RS.MoveNext
IF RS.EOF THEN EXIT FOR
NEXT
SET RS = NOTHING
SET Conn = NOTHING
%>
</TABLE>
</DIV>
<!--CorpRight By Cheery_Ke-->
另:有關ADO2.1與Conn.Errors的說明,請見ms-help://MS.MSDNVS.2052/dnaxctrl/html/ado_objm.htm





主站蜘蛛池模板: 天天爽视频| 日韩中文字幕视频 | 三级免费黄色片 | 生活片一级 | 人妖在线精品一区二区三区 | 欧美一级高清视频在线播放 | 天天操天天射天天插 | 日本天天射 | 中文字幕三级在线不卡 | 日本乱码一卡二卡三卡永久 | 中国一级做a爰片久久毛片 中国性欧美 | 香蕉视频色 | 伊人久久天堂 | 亚洲产在线精品第一站不卡 | 亚洲一区二区三区四区在线 | 日韩精品在线观看视频 | 日韩成人免费在线 | 一级美女黄色片 | 羞羞草视频 | 青青青国产精品手机在线观看 | 午夜无遮挡怕怕怕免费视频 | 影音先锋色69成人资源 | 天天干天天插天天射 | 欧美一区二区三区婷婷月色 | 亚洲国产日韩在线观频 | 亚洲不卡视频 | 日韩一级欧美一级 | 午夜影院观看 | 日韩不卡一级毛片免费 | 中文字幕视频免费在线观看 | 日本一区免费在线 | 欧美一区二区三区久久综合 | 天天艹综合 | 亚洲成人h | 中文字幕视频不卡 | 最新中文字幕一区 | 日本www在线观看 | 欧美在线观看a | 天堂影视网 | 亚洲欧美视频在线 | 日韩中文字幕在线 |