国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > XML > 正文

用ASP、VB和XML建立互聯(lián)網(wǎng)應(yīng)用程序(2)

2024-09-05 20:55:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
,歡迎訪問(wèn)網(wǎng)頁(yè)設(shè)計(jì)愛(ài)好者web開(kāi)發(fā)。讓我們先分析一下客戶端/服務(wù)器應(yīng)用程序。在一個(gè)標(biāo)準(zhǔn)的客戶端/服務(wù)器應(yīng)用程序中,在應(yīng)用程序開(kāi)始時(shí),你能夠初始化數(shù)據(jù)庫(kù)連接字符串,這就意味著,客戶有使用數(shù)據(jù)庫(kù)連接字符串的權(quán)利,這包括用戶名和口令。但是客觀情況如果不允許你在網(wǎng)絡(luò)上發(fā)送這些信息的話,你就必需在不聯(lián)接數(shù)據(jù)庫(kù)的情況下直接從客戶端取得數(shù)據(jù)發(fā)送給客戶。那么解決方案之一就是在服務(wù)器上創(chuàng)建一個(gè)asp頁(yè)(在本例中稱為getdata.asp)接收特定格式的post數(shù)據(jù),它要求一個(gè)包含xml字符串,用來(lái)創(chuàng)建ado對(duì)象并運(yùn)行存儲(chǔ)過(guò)程或動(dòng)態(tài)sql語(yǔ)句命令。如果信息有效的話,getdata.asp執(zhí)行存儲(chǔ)過(guò)程,并返回一個(gè)xml格式的數(shù)據(jù)集、返回值列表或錯(cuò)誤頁(yè)面信息的xml字符串。對(duì)于返回?cái)?shù)據(jù)的命令,客戶端要么重新實(shí)例化要么返回值或使用xml dom(document object model文檔對(duì)象模型)格式的錯(cuò)誤頁(yè)面。

  好,下面就讓我們來(lái)討論一下如何實(shí)現(xiàn)這個(gè)頁(yè)面吧!

  getdata.asp頁(yè)面首先使用一個(gè)domdocument對(duì)象來(lái)保存客戶端發(fā)送的數(shù)據(jù):

  '創(chuàng)建domdocument對(duì)象
  set xml = server.createobject ("msxml2.domdocument")
  xml.async = false

  然后,它裝載post數(shù)據(jù)

  '裝載post數(shù)據(jù)
  xml.load request
  if xml.parseerror.errorcode <> 0 then
   call responseerror ("不能裝載xml信息。" & "description: " & xml.parseerror.reason & "<br>line: " & xml.parseerror.line)
  end if

  它能夠返回commandtext元素值和returndata或returnvalue元素值。下面我只給出返回commandtext元素值的代碼,其余代碼請(qǐng)參看我下面所附的源程序。

  set n = xml.selectsinglenode("command/commandtext")
  if n is nothing then
   call responseerror ("缺少 <sp_name> 參數(shù)。")
  else sp_name = n.text
  end if

  接著,應(yīng)該讓頁(yè)面創(chuàng)建一個(gè)command對(duì)象,讀入所有<param>元素,并且為request中的每一個(gè)元素創(chuàng)建一個(gè)參數(shù)。最后,讓頁(yè)面打開(kāi)一個(gè)連接使用存儲(chǔ)過(guò)程adexecutenorecords選項(xiàng)來(lái)執(zhí)行request。

  set conn = server.createobject("adodb.connection")
  conn.mode=admodereadwrite
  conn.open application("connectionstring")
  set cm.activeconnection=conn
  ' 返回?cái)?shù)據(jù)
  if not returnsdata then
    cm.execute
  else
   set r = server.createobject("adodb.recordset")
   r.cursorlocation = aduseclient
   r.open cm, ,adopenstatic, adlockreadonly
  end if

  如果能夠返回?cái)?shù)據(jù)的話,那么returndata變量就為真值,并且把結(jié)果數(shù)據(jù)集返回到客戶端,仍然是一個(gè)xml文檔。

  if returnsdata then
   r.save response, adpersistxml
    if err.number <> 0 then
     call responseerror ("數(shù)據(jù)集發(fā)生存儲(chǔ)錯(cuò)誤" & "在命令'" & commandtext & "': " &    err.description)
     response.end
    end if

  如果輸出參數(shù)返回值,那么這個(gè)頁(yè)面將返回一個(gè)包含這些值的xml字符串。文檔的根元素是一個(gè)<values>標(biāo)記,每一個(gè)返回值都有其相應(yīng)的子元素,如果發(fā)生任何錯(cuò)誤,頁(yè)面都會(huì)格式化并返回一個(gè)包含錯(cuò)誤信息的xml字符串:

  sub responseerror(sdescription)
   response.write "<response><data>錯(cuò)誤: " & sdescription & "</data></response>"
   response.end
  end sub

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 舒城县| 黑水县| 桃江县| 潞西市| 黄大仙区| 吐鲁番市| 昌乐县| 浪卡子县| 青浦区| 新邵县| 简阳市| 红原县| 中方县| 汶上县| 和顺县| 高雄市| 明水县| 双峰县| 斗六市| 汨罗市| 苏尼特右旗| 绍兴县| 札达县| 讷河市| 东宁县| 武汉市| 比如县| 阳曲县| 克什克腾旗| 明光市| 双流县| 乐业县| 水城县| 宜宾市| 无为县| 剑阁县| 宁蒗| 房产| 陈巴尔虎旗| 绵阳市| 布尔津县|