用ASP、VB和XML建立互联网应用程序(2)
程序员文章站
2022-03-09 21:37:09
让我们先分析一下客户端/服务器应用程序。在一个标准的客户端/服务器应用程序中,在应用程序开始时,你能够初始化连接字符串,这就意味着,客户有使用数据库连接字符串的权利,这包括用户名和口令。但是客观情况...
让我们先分析一下客户端/服务器应用程序。在一个标准的客户端/服务器应用程序中,在应用程序开始时,你能够初始化连接字符串,这就意味着,客户有使用数据库连接字符串的权利,这包括用户名和口令。但是客观情况如果不允许你在网络上发送这些信息的话,你就必需在不联接数据库的情况下直接从客户端取得数据发送给客户。那么解决方案之一就是在服务器上创建一个asp页(在本例中称为getdata.)接收特定格式的post数据,它要求一个包含xml(标准化越来越近了)字符串,用来创建ado对象并运行存储过程或动态sql语句命令。如果信息有效的话,getdata.asp执行存储过程,并返回一个xml(标准化越来越近了)格式的数据集、返回值列表或错误页面信息的xml(标准化越来越近了)字符串。对于返回数据的命令,客户端要么重新实例化要么返回值或使用xml(标准化越来越近了) dom(document object model文档对象模型)格式的错误页面。
好,下面就让我们来讨论一下如何实现这个页面吧!
getdata.asp页面首先使用一个domdocument对象来保存客户端发送的数据:
创建domdocument对象
set xml(标准化越来越近了) = server.createobject ("msxml(标准化越来越近了)2.domdocument")
xml(标准化越来越近了).async = false
然后,它装载post数据
装载post数据
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元素值的代码,其余代码请参看我下面所附的源程序。
set n = xml(标准化越来越近了).selectsinglenode("command/commandtext")
if n is nothing then
call responseerror ("缺少 <sp_name> 参数。")
else sp_name = n.text
end if
接着,应该让页面创建一个command对象,读入所有<param>元素,并且为request中的每一个元素创建一个参数。最后,让页面打开一个连接使用存储过程adexecutenorecords选项来执行request。
set conn = server.createobject("adodb.connection")
conn.mode=admodereadwrite
conn.open application("connectionstring")
set cm.activeconnection=conn
返回数据
if not returnsdata then
cm.execute
else
set r = server.createobject("adodb.recordset")
r.cursorlocation = aduseclient
r.open cm, ,adopenstatic, adlockreadonly
end if
如果能够返回数据的话,那么returndata变量就为真值,并且把结果数据集返回到客户端,仍然是一个xml(标准化越来越近了)文档。
if returnsdata then
r.save response, adpersistxml(标准化越来越近了)
if err.number <> 0 then
call responseerror ("数据集发生存储错误" & "在命令" & commandtext & ": " & err.description)
response.end
end if
如果输出参数返回值,那么这个页面将返回一个包含这些值的xml(标准化越来越近了)字符串。文档的根元素是一个<values>标记,每一个返回值都有其相应的子元素,如果发生任何错误,页面都会格式化并返回一个包含错误信息的xml(标准化越来越近了)字符串:
sub responseerror(sdescription)
response.write "<response><data>错误: " & sdescription & "</data></response>"
response.end
end sub
好,下面就让我们来讨论一下如何实现这个页面吧!
getdata.asp页面首先使用一个domdocument对象来保存客户端发送的数据:
创建domdocument对象
set xml(标准化越来越近了) = server.createobject ("msxml(标准化越来越近了)2.domdocument")
xml(标准化越来越近了).async = false
然后,它装载post数据
装载post数据
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元素值的代码,其余代码请参看我下面所附的源程序。
set n = xml(标准化越来越近了).selectsinglenode("command/commandtext")
if n is nothing then
call responseerror ("缺少 <sp_name> 参数。")
else sp_name = n.text
end if
接着,应该让页面创建一个command对象,读入所有<param>元素,并且为request中的每一个元素创建一个参数。最后,让页面打开一个连接使用存储过程adexecutenorecords选项来执行request。
set conn = server.createobject("adodb.connection")
conn.mode=admodereadwrite
conn.open application("connectionstring")
set cm.activeconnection=conn
返回数据
if not returnsdata then
cm.execute
else
set r = server.createobject("adodb.recordset")
r.cursorlocation = aduseclient
r.open cm, ,adopenstatic, adlockreadonly
end if
如果能够返回数据的话,那么returndata变量就为真值,并且把结果数据集返回到客户端,仍然是一个xml(标准化越来越近了)文档。
if returnsdata then
r.save response, adpersistxml(标准化越来越近了)
if err.number <> 0 then
call responseerror ("数据集发生存储错误" & "在命令" & commandtext & ": " & err.description)
response.end
end if
如果输出参数返回值,那么这个页面将返回一个包含这些值的xml(标准化越来越近了)字符串。文档的根元素是一个<values>标记,每一个返回值都有其相应的子元素,如果发生任何错误,页面都会格式化并返回一个包含错误信息的xml(标准化越来越近了)字符串:
sub responseerror(sdescription)
response.write "<response><data>错误: " & sdescription & "</data></response>"
response.end
end sub
上一篇: 代码演示反射核心内容
下一篇: ASP+配置 — ASP+配置概念(二)