直播中
CREATE PROCEDURE RecentPurchaseByCustomerID @CustomerID nchar(5), @ProductName nchar(40) output AS SELECT @ProductName = (SELECT top 1 ProductName FROM Products INNER JOIN ([Order Details] INNER JOIN Orders ON Orders.OrderID=[Order Details].OrderID) ON Products.ProductID = [Order Details].ProductID WHERE Orders.OrderDate = (SELECT MAX(orders.orderdate) FROM Orders
where CustomerID=@CustomerID) AND Orders.CustomerID=@CustomerID) GO
不管你的查詢語(yǔ)句中含有動(dòng)態(tài)SQL語(yǔ)句還是含有返回記錄集的存儲(chǔ)過(guò)程或是輸出一個(gè)返回值,其處理POST消息的方法是一樣的:
set xhttp = createObject ("msxml2.XMLHTTP")
xhttp.open "POST", "http://localhost/myWeb/ getData.asp", False
xhttp.send s
好了,現(xiàn)在讓我們看一看如何發(fā)送和接收數(shù)據(jù)
客戶端的XML信息是由一個(gè)<command>元素和一些子元素組成:<commandtext>元素包含了存儲(chǔ)過(guò)程的名稱,<returnsdata>元素告訴服務(wù)器,客戶端是否要求接收返回?cái)?shù)據(jù),<param>元素包含參數(shù)信息。如果不使用參數(shù)的話,那么最簡(jiǎn)單的發(fā)送字符串查詢就象下面這樣:
?。糲ommand>
?。糲ommandtext>
存儲(chǔ)過(guò)程或動(dòng)態(tài)SQL語(yǔ)句
?。?commandtext>
<returnsvalues>True</returnsvalues>
?。?command>
你可以為每一個(gè)參數(shù)使用一個(gè)<param>元素,來(lái)添加參數(shù)。每個(gè)<param>元素有五個(gè)子元素:name,type,direction,size和value。子元素的順序可以隨意調(diào)換,但是所有的元素都應(yīng)當(dāng)有不能缺少,我通常按照定義一個(gè)ADO對(duì)象的值的順序來(lái)定義它們。舉例來(lái)說(shuō),CustOrderHist存儲(chǔ)過(guò)程需要一個(gè)CustomID參數(shù),所以用來(lái)創(chuàng)建發(fā)送到getData.asp的XML字符串的代碼為:
dim s
s = "<?xml version=""1.0""?>" & vbcrlf
s = s & "<command><commandtext>"
s = s & "CustOrderHist"
s = s & "</commandtext>"
s = s & "<returnsdata>" &True</returnsdata>"
s = s & "<param>"
s = s & "<name>CustomerID</name>"
s = s & "<type><%=adVarChar%></type>"
s = s & "<direction>" & <%=adParamInput%></direction>"
s = s & "<size>" & len(CustomerID)& "</size>"
s = s & "<value>" & CustomerID &"</value>"
s = s & "</param>"
s = s & "</command>"
注意,前面的代碼都是客戶端代碼,ADO常量是不在客戶端定義的-這就是它們?yōu)槭裁词褂茫? %>標(biāo)記圍起來(lái)的原因。服務(wù)器在發(fā)送響應(yīng)之前使用正確的值取代它們。getData.asp頁(yè)有一個(gè)Response.ContentType,它的屬性為"text/xml",這樣,你就可以使用ResponseXML屬性來(lái)返回結(jié)果了。當(dāng)請(qǐng)求返回紀(jì)錄,你就可以創(chuàng)建一個(gè)Recordset對(duì)象并且使用XMLHTTP來(lái)打開(kāi)它:
Dim R
set R = createObject("ADODB.Recordset")
R.open xhttp.responseXML
當(dāng)查詢語(yǔ)句返回?cái)?shù)據(jù)時(shí),通過(guò)設(shè)置XMLHTTPRequest對(duì)象的responseXML屬性來(lái)創(chuàng)建一個(gè)DOMDocument:
Dim xml
set xml = xhttp.responseXML
輸出參數(shù)的XML字符串的每個(gè)返回值都包含一個(gè)元素,它們都是根元素<values>的直接子元素,例如:
<?xml version=""1.0"" encoding=""gb2312""?>
?。紇alues>
<paramname>value</paramname>
?。紁aramname>value</paramname>
</values>
如果你的數(shù)據(jù)使用別的國(guó)家的文字,你可能需要把編碼屬性用相應(yīng)的編碼替換,例如對(duì)于大部分歐洲語(yǔ)言,可以使用ISO-8859-1
客戶端頁(yè)面使用返回的數(shù)據(jù)來(lái)格式化一個(gè)HTML字符串用于顯示,如:
document.all("details").innerHTML = <一些格式化的HTML字符串>