在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

ASP 3.0高級編程(410)

ASP 3.0高級編程(410)

更新時間:2022-05-14 文章作者:未知 信息來源:網絡 閱讀次數:

8.5.1 Errors集合
       Errors集合包含由單個ADO命令的執行而引起的每一個錯誤的Error對象。使用Errors集合的原因是由于在一個命令的執行過程中,可能會引起多個錯誤,OLE DB提供者需要提供一種方式通知客戶方已有多個錯誤發生。
       關于Errors集合有兩個重要的地方需要注意:
       · 每次執行ADO命令,如果發生錯誤,就清空錯誤集,同時代之以新的錯誤內容。當然,如果沒有錯誤發生,Errors集合不會受到影響。所以,即使ADO命令成功執行,這個集合中也可能含有錯誤信息。
       · OLE DB提供者可能會將包含信息的消息或警告裝入Errors集合,錯誤號為0。所以不能只檢查集合中的錯誤號而假定錯誤已經發生。比如,使用ODBC提供者與SQL Server連接,可能會得到一個“錯誤”,告知缺省的數據庫已經改變了。
       如果回頭看一下本章開始講到的對象模型,可能會發現Errors集合只能由Connection對象訪問。讀者可能會覺得奇怪,如果不顯式地創建一個Connection對象,如何訪問Errors集合?Recordset對象有一個ActiveConnection屬性,含有當前記錄集的Connection對象,這意味著可以這樣得到Errors集合:
       rsAuthors.ActiveConnection.Errors
       如果想看發生的全部錯誤,則需要遍歷整個Errors集合:
       For Each errAuthors In rsAuthors.ActiveConnection.Errors
              ' Display error
       Next
       為了顯示一些合理的錯誤信息,需要確切知道在Errors集合中到底有些什么。
       Error對象包含表8-5所示的屬性:
表8-5  Error對象的屬性及說明
屬 性
說 明

Number
ADO錯誤號

NativeError
從數據提供者獲得的錯誤號

SQLState
連接到SQL數據庫時,5位的SQL狀態代碼

Source
引起錯誤的對象

Description
錯誤說明文本

       這意味著循環過程現在可以變成這樣:
       For Each errAuthors In rsAuthors.ActiveConnection.Errors

              Response.Write "Number: " & errAuthors.Number & _
                                    "<BR>NativeError: " & errAuthors.NativeError & _
                                    "<BR>SQLState: " & errAuthors.SQLState & _
                                    "<BR>Source: " & errAuthors.Source & _
                                    "<BR>Description: " & errAuthors.Description & _
                                    "<P>"
              Next

8.5.2 ASP頁面中的ADO錯誤
       在第4、7章,我們研究了ASP的錯誤,以及如何簡潔并徹底地處理這些錯誤。ASP 3.0的一個新特征就是自定義錯誤頁面,但這對于ADO確實用處不大,因為腳本中的變量無法傳入自定義的錯誤頁面。這就意味著我們無法檢測Errors集合。
       面對這樣的情況,必須提供自己的錯誤處理。如果你使用JScript作為服務器端編程語言,那么你將擁有新的try/catch特性,但是VBScript對于錯誤的處理仍然有許多不足。目前,最好的檢測錯誤的方法是使用On Error Resume Next語句,然后在可能會引起錯誤的每一行ADO代碼后檢查Errors集合。就像這樣:
       <%
       On Error Resume Next

       Dim rsAuthors
       Dim strSQL

       Set rsAuthors = Server.CreateObject("ADODB.Recordset")

       strSQL = "SELECT MissingColumn1, MissingColumn2, au_lname, au_fname " & _
                     "FROM authors"

       rsAuthors.Open strSQL, strConn, adOpenDynamic, adLockOptimistic, adCmdText

       If CheckForErrors (rsAuthors.ActiveConnection) = False Then
              While Not rsAuthors.EOF
                     Response.Write rsAuthors("au_lname") & ", " & _
                                           rsAuthors("au_fname") & "<BR>"
                     rsAuthors.MoveNext
              Wend
       End If

       rsAuthors.Close
       Set rsAuthors = Nothing
       %>
       這里可使用CheckForErrors子程序來檢測是否有錯誤發生:
Function CheckForErrors(objConn)

Dim objError               ' Error object

' Errors means the count will be greater than 0
If objConn.Errors.Count > 0 Then

  ' Loop through the errors
   For each objError in objConn.Errors
    
        ' Eorros with number 0 are informational
      If objError.number <> 0 then
                  Response.Write "<TABLE BORDER=1>" & _
                     "<TR><TD>Error Property</TD><TD>Contents</TD>" & _
                     "</TR><TR><TD>Number</TD><TD>" & objError.Number & _
                     "</TD></TR><TR><TD>NativeError</TD><TD>" & _
                     objError.NativeError & "</TD></TR>" & _
                     "<TR><TD>SQLState</TD><TD>" & objError.SQLState & _
                     "</TD></TR><TR><TD>Source</TD><TD>" & _
                     objError.Source & "</TD></TR>" & _
                     "<TR><TD>Description</TD><TD>" & _
                     objError.Description & "</TD></TR></TABLE><P>"
         CheckForErrors = True
       End If

    Next

Else
   CheckForErrors = False
End If

End Function
%>
這個程序檢測是否有錯誤,如果有,則為每一個錯誤創建一個表格,并給出了如圖8-11所示的結果。

圖8-11  顯示的錯誤結果
這并不是一個技術含量較高的解決方案,但確實是用VBScript所能做到的最好的解決方案。真正的不足是必須自己檢測錯誤。

8.6 小結
       現在,應該擴展基礎知識,研究Command對象,理解如何使用一些高級特性去改進性能和維護ASP頁面。

第9章 連接、命令和過程

       上一章討論了ADO的基礎知識,內容主要涉及Recordset對象以及對數據的處理。在大多數例子中,只是通過指定數據庫的表名來獲取數據,但正如從對象模型中看到的,ADO還有其他允許訪問數據的對象。
       本章將要更詳細地介紹這些對象,特別將研究以下內容:
       · Connection對象,以及如何用它來獲取數據和運行命令。
       · Command對象,為什么需要該對象及其所具有的功能。
       · 如何運行存儲過程,特別是那些需要參數的存儲過程。
       · 一些簡單的改善ADO性能的優化技巧。
       · 數據整形的概念及如何使用。
       如同介紹Recordset對象那樣,我們不打算覆蓋所涉及對象的全部方法和屬性。在這里只探討其中最重要的主題,以及那些適用于ASP開發人員的方法與屬性。

9.1 Connection對象
       前一章中已經提及,Connection對象是為我們與數據存儲提供連接的對象,但這并非Connection對象的全部功能。除了存儲連接的細節外(比如數據存儲的類型,以及其支持的特性),也可以利用Connection對象運行命令。
       這些命令可能是查詢動作,比如更新、插入或刪除操作,也可以是返回一個記錄集的命令。讀者可能會覺得奇怪:既然有了Recordset對象,這又有什么用?這正是ADO的靈活性所在,可以根據當前的情況,以及對當前任務的適用性選擇使用任一種對象。
       從Connection對象運行的命令一般是查詢動作,但了解能夠得到返回的記錄集也是非常有用的。

9.1.1 返回一個記錄集
       為了從Connection對象返回一個記錄集,要使用Execute方法。語法是:
       Connection.Execute CommandText, [RecordsAffected], [Options]
       參數及說明如表9-1所示:
表9-1  Connection對象的Execute方法的參數及說明
參 數
說 明

CommandText
執行的命令文本。與Recordset的Open方法中的Source參數相同,也能代表一個現有的Command對象

RecordsAffected
受命令執行影響的記錄數

Options
命令選項,可以是一個或多個CommandTypeEnum或ExecuteOptionEnum常數,詳細的值請見上一章

       Execute方法可選擇地返回一個記錄集,在這種情況下只要將返回值賦給記錄集變量。例如:
       Set conPubs = Server.CreateObject("ADODB.Connection")
       
       conPubs.Open strConn

       Set rsAuthors = conPubs.Execute("Authors")
       讀者可能會奇怪使用Connection對象的Execute方法與使用Recordset對象的Open方法之間到底有什么區別?看上去區別不是很大,使用Recordset對象的Open方法可以改變光標類型和鎖定類型。這些選項對于Connection對象的Execute方法是不可用的,因此永遠只能得到一個只能前移的、只讀的記錄集。

9.1.2 操作命令
       如果正在運行操作命令,比如一個SQL UPDATE語句,那么可以使用RecordAffected參數找出有多少條記錄受到該命令的影響。例如:
       Dim strSQL As String
       Dim lngRecs As Long

       strSQL = "UPDATE Titles SET Price = Price * 1.10" & "WHERE Type='Business'"

       conPubs.Execute strSQL, lngRecs, adCmdText

       Response.Write lngRecs & " records were updated."
       上述代碼將所有類型為Business的書的單價增加了10%。一旦Execute命令執行完畢,受Update命令影響的記錄數就返回到變量lngRecs中,這就是RecordsAffected參數。
       注意,已經為命令指定了adCmdText選項,告訴ADO CommandText參數是一個文本命令。一般這不是嚴格必須的,其目的只是讓ADO預先知道執行的命令屬于何種類型,這樣能夠提高性能。記住,這個值可以是一個或多個CommandTypeEnum值。
       無記錄集返回
       如果上面的例子不返回記錄集,那么在Execute語句中加入另一個選項也是較好的方法:
       conPubs.Execute strSQL, lngRecs, adCmdText + adExecuteNoRecords
       使用adExecuteNoRecords告訴ADO執行的命令不返回任何記錄。所以,ADO不必費心去創建一個記錄集。如果省略了該選項,那么ADO將會創建一個空的記錄集,很明顯這浪費了時間,因此加上這個選項會加快語句的執行。

9.2 Command對象
       Command對象特定地為處理各種類型的命令而設計,特別是那些需要參數的命令。與Connection對象相似,Command對象可以運行返回記錄集和不返回記錄集兩種類型的命令。實際上,如果命令不含有參數,那么它并不關心是使用Connection對象,還是Command對象,還是Recordset對象。

9.2.1 返回記錄集
       對于一個返回記錄集的命令,可使用Execute方法。然而,與Connection對象不同,必須使用CommandText屬性,而不能在Execute方法中使用命令文本。
       Set cmdAuthors = Server.CreateObject("ADODB.Command")

       cmdAuthors.CommandText = "Authors"

       Set rsAuthors = cmdAuthors.Execute
       這是告訴Command對象去執行一個簡單的、返回一個只讀記錄集的命令的最簡單方法。
       Execute方法也有一些可選參數,如表9-2所示:
表9-2  Command對象的Execute方法的參數及說明
參 數
說 明

RecordsAffected
受命令影響的記錄數

Parameters
參數值數值

Options
命令選項,與Recordset的Open方法中的Options選項相似

       參數RecordsAffected與Options同前面解釋的一樣,另外也可以使用CommandType屬性設置命令類型:
       Set cmdAuthors = Server.CreateObject("ADODB.Command")

       cmdAuthors.CommandText = "Authors"
       cmdAuthors.CommandType = adCmdTable
       如果不設置其他參數,也可以在Execute行上設置,必須為它們使用逗號:
       Set rsAuthors = cmdAuthors.Execute(, , adCmdTable)
       在本章后面處理存儲過程時,將會看到參數Parameters的用途。
       改變光標類型
       值得注意是,使用Execute方法返回的記錄集具有缺省的光標類型。這意味著這是只能前移的、只讀的記錄集。雖然使用Execute方法不能改變這種情況,但對這個問題有一個解決的方法。
       如果需要使用一個命令,并且要求不同的光標和鎖定類型,那么應該使用Recordset的Open方法,此時Command對象作為Recordset的數據源。例如:
       cmdAuthors.ActiveConnection = strConn
       cmdAuthors.CommandText = "Authors"
       cmdAuthors.CommandType = adCmdTable

       rsAuthors.Open cmdAuthors, , adOpenDynamic, adLockOptimistic
       注意,在Open命令行中忽略了連接細節,因為連接設置在Command對象中。連接細節在命令打開前已經設置在Command對象的ActiveConnection屬性中。

9.2.2 操作命令
       對于操作命令,比如那些無記錄返回的更新命令,整個過程相似,只需移去設置記錄集的代碼:
       Set cmdUpdate = Server.CreateObject("ADODB.Command")
       strSQL = "UPDATE Titles SET Price = Price * 1.10" & "WHERE Type='Business'"

       cmdUpdate.ActiveConnection = strConn
       cmdUpdate.CommandText = sSQL
       cmdUpdate.CommandType = adCmdText

       cmdUpdate.Execute , , adExecuteNoRecords
       注意,我們在此設置了命令類型,然后在Execute行中增加了額外的設置選項。這段代碼運行UPDATE命令,并且保證不會創建新的記錄集。


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 免费av不卡在线| 国产精品嫩草影视| 免费观看中文字幕| 国产精品一区二区羞羞答答| 奇米影视亚洲色图| 999久久久精品视频| 成年人小视频网站| 女人和拘做爰正片视频| 污污污污污污www网站免费| 亚洲高清免费在线观看| 蜜臀久久99精品久久久酒店新书| 黄页网站在线观看视频| 欧美性猛交内射兽交老熟妇| 免费不卡av网站| 国产免费中文字幕| 国产91色在线观看| 欧美私人情侣网站| 日本成人黄色网| 免费看国产黄色片| 91日韩视频在线观看| 动漫av网站免费观看| 三上悠亚久久精品| 日韩毛片在线免费看| 虎白女粉嫩尤物福利视频| 免费在线a视频| 国产无套内射久久久国产| 久久久久狠狠高潮亚洲精品| 午夜免费高清视频| 99视频在线视频| 免费黄频在线观看| 91社在线播放| 欧美激情视频免费看| 国产一区二区在线视频播放| 50路60路老熟妇啪啪| 亚洲国产精品三区| 强伦女教师2:伦理在线观看| 国产精品久久久久7777| 欧美在线观看www| 性生交免费视频| 超碰中文字幕在线观看| 日韩精品一区二区在线视频 | 每日在线观看av| www.av中文字幕| 亚洲老女人av| a级片一区二区| 激情综合网婷婷| 日日噜噜夜夜狠狠久久丁香五月| 一本久道高清无码视频| av污在线观看| 免费的一级黄色片| 午夜dv内射一区二区| 米仓穗香在线观看| 熟妇人妻无乱码中文字幕真矢织江| 一区二区久久精品| 成人黄色av片| 一区中文字幕在线观看| 免费在线观看毛片网站| 91网址在线观看精品| 国产日韩一区二区在线| 国产美女视频免费看| 成熟老妇女视频| 成人一区二区免费视频| 日本77777| 日韩中文字幕免费在线| a级黄色片免费| www.桃色.com| 黄色手机在线视频| 成人羞羞国产免费网站| 91黄色在线看| 日韩人妻一区二区三区蜜桃视频| 免费看a级黄色片| 99爱视频在线| 黄色一级片播放| 免费拍拍拍网站| 免费cad大片在线观看| 香蕉视频xxx| 黄色三级视频在线播放| xxww在线观看| 中国黄色片免费看| 老司机久久精品| 91小视频在线播放| 在线观看免费视频污| 五月天婷婷在线观看视频| 午夜啪啪小视频| 欧美国产日韩在线视频| 久久久福利影院| 国产精品av免费| 黄色小视频大全| 国产av熟女一区二区三区 | 一区二区在线免费看| 天天操,天天操| 天堂中文av在线| 小早川怜子一区二区三区| 日本一二三区在线| 中文字幕日韩精品无码内射| 成人一区二区免费视频| www一区二区www免费| 免费男同深夜夜行网站 | 欧美污视频网站| 久久久精品麻豆| 强开小嫩苞一区二区三区网站| www.黄色网址.com| 夜夜添无码一区二区三区| 男人天堂网视频| 亚洲精品mv在线观看| 日本午夜激情视频| 日日躁夜夜躁aaaabbbb| 在线观看成人免费| 黄色动漫在线免费看| 狠狠干狠狠操视频| 精品人妻人人做人人爽| 妺妺窝人体色www在线观看| 特黄特黄一级片| 国产精品动漫网站| 四虎4hu永久免费入口| 免费在线激情视频| 大桥未久一区二区三区| 毛片一区二区三区四区| www.亚洲一区二区| 国产精品涩涩涩视频网站| 日本一级淫片演员| 蜜臀av免费观看| 久久精品.com| 丁香婷婷综合激情| 加勒比av中文字幕| 免费日韩中文字幕| 久草热视频在线观看| 国内自拍第二页| 日本xxxx黄色| 色综合av综合无码综合网站| 国产一二三四五| 日本xxxx黄色| 少妇高潮喷水久久久久久久久久| 国产欧美自拍视频| 亚洲77777| 国产一线二线三线在线观看| 亚洲熟妇av日韩熟妇在线| 18视频在线观看娇喘| 手机免费看av网站| 中文字幕成人免费视频| 色国产在线视频| 性欧美videossex精品| 成人在线观看a| 黄色动漫在线免费看| 亚洲美免无码中文字幕在线| 9色porny| ww国产内射精品后入国产| 国产一区二区三区在线免费| 欧美在线观看黄| 久久人妻无码一区二区| 无码人妻aⅴ一区二区三区日本| 国产免费xxx| 狠狠精品干练久久久无码中文字幕 | 精品国产一二三四区| 男人添女人荫蒂免费视频| 99热这里只有精品免费| 4444亚洲人成无码网在线观看| 日本a在线天堂| 1024av视频| www.日本xxxx| 亚洲涩涩在线观看| 激情视频小说图片| 91九色丨porny丨国产jk| 六月丁香婷婷激情| 色www免费视频| 日韩一二区视频| 99色精品视频| 国产九九热视频| 麻豆视频传媒入口| aa在线观看视频| 欧美一级视频在线| 欧美做暖暖视频| 男人女人黄一级| 91精品国产吴梦梦| 黄www在线观看| 久久精品亚洲天堂| 日本a在线免费观看| jizz大全欧美jizzcom| 少妇一晚三次一区二区三区| aa免费在线观看| 国产成年人在线观看| 欧美牲交a欧美牲交| 最新av免费在线观看| 日本手机在线视频| 香蕉视频999| 5月婷婷6月丁香| 中文字幕一区二区三区四区五区人| 2019日韩中文字幕mv| 亚洲黄色片免费看| 无码日韩人妻精品久久蜜桃| 影音先锋成人资源网站| 看欧美ab黄色大片视频免费| 97视频在线免费| 天堂v在线视频| 久久久国产欧美| 国产黄页在线观看| 一二三四中文字幕| 日本高清免费观看| 日韩av卡一卡二| 可以免费在线看黄的网站|