欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP高级技巧精选集

程序员文章站 2023-11-29 18:08:04
一、getrows的使用方法:<%set conn=server.createobject("adodb.connection")conn.open&nbs...
一、getrows的使用方法:
<%
set conn=server.createobject("adodb.connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("test.mdb")
set rs=server.createobject("adodb.recordset")
rs.open "select top 2 * from 表名",conn,0,1

dim array_str
array_str = rs.getrows()

response.write "第一条记录:<br>"
response.write array_str(0,0)&"<br>"
response.write array_str(1,0)&"<br>"
response.write array_str(2,0)&"<br>"
response.write array_str(3,0)&"<br>"
response.write "第二条记录:<br>"
response.write array_str(0,1)&"<br>"
response.write array_str(1,1)&"<br>"
response.write array_str(2,1)&"<br>"
response.write array_str(3,1)&"<br>"
%>
熟悉getrows你会发现操作数据库更简捷、速度更优化。优点可是很多的哦:)

 

二、声明变量是必要的吗?
以下情况需要声明变量:
1.你是一个好的程序员
2.写高质量的代码
加入以下代码可以强制声明变量:
<%option explicit%>

 

三、如何在客户端调用服务器端的函数?
    远程脚本调用技术(remote scripting)的特点是客户端脚本调用服务器脚本时无需刷新整个页面。
    一般情况下,web页面需要与服务器交互时必须提交表单数据,刷新整个页面。而利用远程脚本调用技术,客户端脚本可以像调用本地函数一样调用远程脚本函数,特别是在复杂的表单验证和频繁的数据库操作中,这种优势更是得到了淋漓尽致的发挥。
    它的基本原理是其借助本身提供的一组接口函数,客户端程序可以通过一个代理过程(一个java applet)调用服务器端代码。javaapplet(rsproxy.class)在后台工作,通常情况下用户代码并不需要直接操作它,它的配置也是自动完成的。远程脚本调用既可以是同步调用---调用命令发出后一直等待,直到服务器执行函数结束后返回;也可以是异步调用---函数调用后立即返回,调用必须同时给出回调函数。一个基本远程脚本调用技术必须包含如下文件:
    rs.htm:包含客户端支持代码
    rsproxy.class:这是一个java applet,实际完成客户/服务器交互过程
    rs.asp:服务器端支持代码
    使用远程脚本调用功能时,客户端和服务器端代码都必须符合一定的要求:在服务器端,首先必须启用远程脚本调用:用#include包含rs.asp,并调用rsdispath函数。在服务器端实现远程脚本支持的关键在于创建public_description对象。它在远程调用时脚本执行过程和普通asp页面执行过程不同,它把全局脚本代码放入函数并显式调用。
    远程脚本调用技术要求服务器端的脚本必须用javascript编写。下面示例声明了一个description类,该类包含一个公用的saml函数,用new关键字创建description,即public_description对象。
    1.远程脚本调用对象服务器端的要求:
<%@language=vbscript%>
<%rsdispatch%>
<!--#include file="../rs.asp"-->
<script language=javascript runat=server>
function description(){
    this.saml=saml;
}
public_description=new description();
function saml(str){
    return "hi!" + str + ":\n你的sessionid=" + session.sessionid+"\n你的ip="+request.servervariables("remote_addr");
}
</script>

2.远程调用功能对客户端的要求。首先,启用远程脚本调用技术功能的web页面必须引用rs.htm;其次,必须调用rsenableremotescripting函数。rsenableremotescripting函数允许在参数中指定rsproxy.class文件所在的实际路径,果没有指定这个参数,默认为rsproxy.class在_scriptlibrary目录下:
<script language="javascript" src="../rs.htm"></script>
<script language="javascript">rsenableremotescripting("..");</script>

3.调用远程脚本。完成上面的准备工作后,就可以用rsexecute方法在客户端代码中远程调用服务器端函数了。该方法接受的参数包括服务器asp页面的url、远程函数名字以及参数列表。其调用结果是一个调用对象(call object),包含该次调用的返回值以及状态信息,其主要属性包括:
id:该次调用的唯一标识(属性实际上是一个xml字符串);
return_value:实际返回值,如果存在的话;
data:服务器响应该次远程调用返回的原始数据;
status:标识本次调用的状态,-1表示失败,0表示完成。
message:有关本次调用的文本信息。如调用成功,为completed,否则,包含错误说明。

 

四、从sql数据库中调用图片显示:
<%@language=vbscript%>
<%option explicit%>
<%
dim conn,rs,pic,picsize
response.buffer=true
'设置http表头信息,以便让浏览器解释作为gif图象返回的数据
response.contenttype="image/gif"
set conn=server.createobject("adodb.connection")
conn.open "................."
set rs=server.createobject("adodb.recordset")
rs.open ".................",conn,0,1
picsize=rs("img").actualsize
pic=rs("img").getchunk(picsize)
response.binarywrite pic
response.end
%>

 

五、使用dll一定比asp代码速度快吗?
不一定,在iis5.0里,asp的速度已经得到了一定的提升,很多情况下asp代码运行速度比使用dll更快。如果dll代码编写得不够理想,往往比asp更慢。但dll有比asp更好的优势:比如功能、安全性、共享等。

 

六、如何在不同页面间共享数组内容?
a.asp文件内容:
<%
dim arr(5)
dim str,i
'给数据赋值
for i= 0 to 5
    arr(i)=i
next
'传递数组
str=join(arr)
response.write "<a href=test.asp?tempstr="& str &">传送数组内容</a>"
%>

test.asp内容:
<%
dim tempstr
tempstr=split(request("str"),",")
response.write tempstr(0) & "<br>" & tempstr(1)
%>

 

七、eval的用法:
<%
m="50+60+80"
response.write eval(m)
%>

 

八、为什么在ado访问数据库时使用事务会提示出错?
情况一:
set dbconn=server.createobject("adodb.connection")
set dbcmd=server.createobject("adodb.command")
dbconn.open "dsn=sqlforum;uid=sa;pwd=;"
dbconn.begintrans
rs.open "select * from message",dbconn
set dbcmd.activeconnection=dbconn
以上语句提示如下错误信息:
unspecified error

情况二:
set dbconn=server.createobject("adodb.connection")
bconn.open "dsn=sqlforum;uid=sa;pwd=;"
dbconn.begintrans
以上语句提示如下信息:
cannot start transaction while in firehose mode.

情况三:
set dbconn=server.createobject("adodb.connection")
set dbcmd=server.createobject("adodb.command")
dbconn.open "dsn=sqlforum;uid=sa;pwd=;"
rs.open "select * from message",dbconn
set dbcmd.activeconnection=dbconn
dbconn.begintrans
以上语句提示如下信息:
cannot start transaction because more than one hdbc is in use.

这是怎么回事?如何解决?
    "firehose"指的是一个只读的游标模式。当我们打开recordset时没有指定游标类型,则recordset会以向前的游标打开,与sqlserver连用时,我们称之为"firehose"。此连接会一直打开,查询结果会尽快打开,而这种只读方式下是不能执行事务的。
    像上面几中情况出错的原因都是由于在"firehose"模式,command对象的activeconnection的游标模式是readonly的。
    改变"firehose"的方法有如下几种:
    1.设定connection的游标类型不是向前只读。
    2.在开始事务之前关闭使用同一连接的recordset对象。

 

九、用insert into 还是 addnew?
addnew实质上是封装了insert into,所以速度会比insert into慢。