ASP高级技巧精选集
ASP高级技巧精选集
发布时间:2016-12-29 来源:查字典编辑
摘要:一、GetRows的使用方法:熟悉GetRows你会发现操作数据库更简捷、速度更优化。优点可是很多的哦:)二、声明变量是必要的吗?以下情况需...

一、GetRows的使用方法:

<%

Setconn=Server.CreateObject("Adodb.Connection")

conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.Mappath("test.mdb")

SetRs=Server.CreateObject("Adodb.Recordset")

Rs.Open"SelectTop2*From表名",conn,0,1

DimArray_str

Array_str=rs.GetRows()

Response.Write"第一条记录:<br>"

Response.WriteArray_str(0,0)&"<br>"

Response.WriteArray_str(1,0)&"<br>"

Response.WriteArray_str(2,0)&"<br>"

Response.WriteArray_str(3,0)&"<br>"

Response.Write"第二条记录:<br>"

Response.WriteArray_str(0,1)&"<br>"

Response.WriteArray_str(1,1)&"<br>"

Response.WriteArray_str(2,1)&"<br>"

Response.WriteArray_str(3,1)&"<br>"

%>

熟悉GetRows你会发现操作数据库更简捷、速度更优化。优点可是很多的哦:)

二、声明变量是必要的吗?

以下情况需要声明变量:

1.你是一个好的程序员

2.写高质量的代码

加入以下代码可以强制声明变量:

<%OptionExplicit%>

三、如何在客户端调用服务器端的函数?

远程脚本调用技术(RemoteScripting)的特点是客户端脚本调用服务器脚本时无需刷新整个页面。

一般情况下,Web页面需要与服务器交互时必须提交表单数据,刷新整个页面。而利用远程脚本调用技术,客户端脚本可以像调用本地函数一样调用远程脚本函数,特别是在复杂的表单验证和频繁的数据库操作中,这种优势更是得到了淋漓尽致的发挥。

它的基本原理是其借助本身提供的一组接口函数,客户端程序可以通过一个代理过程(一个javaapplet)调用服务器端代码。JavaApplet(RSProxy.class)在后台工作,通常情况下用户代码并不需要直接操作它,它的配置也是自动完成的。远程脚本调用既可以是同步调用---调用命令发出后一直等待,直到服务器执行函数结束后返回;也可以是异步调用---函数调用后立即返回,调用必须同时给出回调函数。一个基本远程脚本调用技术必须包含如下文件:

RS.htm:包含客户端支持代码

RSProxy.class:这是一个JavaApplet,实际完成客户/服务器交互过程

RS.asp:服务器端支持代码

使用远程脚本调用功能时,客户端和服务器端代码都必须符合一定的要求:在服务器端,首先必须启用远程脚本调用:用#include包含RS.asp,并调用RSDispath函数。在服务器端实现远程脚本支持的关键在于创建public_description对象。它在远程调用时脚本执行过程和普通ASP页面执行过程不同,它把全局脚本代码放入函数并显式调用。

远程脚本调用技术要求服务器端的脚本必须用javascript编写。下面示例声明了一个Description类,该类包含一个公用的saml函数,用new关键字创建Description,即public_description对象。

1.远程脚本调用对象服务器端的要求:

<%@language=vbscript%>

<%RSDispatch%>

<>

<Scriptlanguage=javascriptrunat=server>

functionDescription(){

this.saml=saml;

}

public_description=newDescription();

functionsaml(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目录下:

<scriptlanguage="javascript"src="../rs.htm"></script>

<scriptlanguage="javascript">RSEnableRemoteScripting("..");</script>

3.调用远程脚本。完成上面的准备工作后,就可以用RSExecute方法在客户端代码中远程调用服务器端函数了。该方法接受的参数包括服务器ASP页面的URL、远程函数名字以及参数列表。其调用结果是一个调用对象(CallObject),包含该次调用的返回值以及状态信息,其主要属性包括:

id:该次调用的唯一标识(属性实际上是一个XML字符串);

return_value:实际返回值,如果存在的话;

data:服务器响应该次远程调用返回的原始数据;

status:标识本次调用的状态,-1表示失败,0表示完成。

message:有关本次调用的文本信息。如调用成功,为Completed,否则,包含错误说明。

四、从SQL数据库中调用图片显示:

<%@language=VBscript%>

<%OptionExplicit%>

<%

Dimconn,rs,pic,picsize

Response.Buffer=True

'设置http表头信息,以便让浏览器解释作为gif图象返回的数据

Response.ContentType="image/gif"

setconn=server.createobject("adodb.connection")

conn.open"................."

setrs=server.createobject("adodb.recordset")

rs.open".................",conn,0,1

picsize=rs("img").actualsize

pic=rs("img").getchunk(picsize)

response.binarywritepic

response.end

%>

五、使用DLL一定比ASP代码速度快吗?

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

六、如何在不同页面间共享数组内容?

a.asp文件内容:

<%

Dimarr(5)

Dimstr,i

'给数据赋值

Fori=0to5

arr(i)=i

Next

'传递数组

str=join(arr)

Response.Write"<ahref=test.asp?tempstr="&str&">传送数组内容</a>"

%>

test.asp内容:

<%

dimtempstr

tempstr=split(Request("str"),",")

response.writetempstr(0)&"<br>"&tempstr(1)

%>

七、Eval的用法:

<%

m="50+60+80"

response.writeeval(m)

%>

八、为什么在ADO访问数据库时使用事务会提示出错?

情况一:

setdbconn=server.createobject("adodb.connection")

setdbcmd=server.createobject("adodb.command")

dbconn.open"dsn=sqlforum;uid=sa;pwd=;"

dbconn.BeginTrans

Rs.Open"select*frommessage",dbconn

setdbcmd.activeconnection=dbconn

以上语句提示如下错误信息:

Unspecifiederror

情况二:

setdbconn=server.createobject("adodb.connection")

bconn.open"dsn=sqlforum;uid=sa;pwd=;"

dbconn.BeginTrans

以上语句提示如下信息:

Cannotstarttransactionwhileinfirehosemode.

情况三:

setdbconn=server.createobject("adodb.connection")

setdbcmd=server.createobject("adodb.command")

dbconn.open"dsn=sqlforum;uid=sa;pwd=;"

rs.open"select*frommessage",dbconn

setdbcmd.activeconnection=dbconn

dbconn.BeginTrans

以上语句提示如下信息:

Cannotstarttransactionbecausemorethanonehdbcisinuse.

这是怎么回事?如何解决?

"firehose"指的是一个只读的游标模式。当我们打开Recordset时没有指定游标类型,则Recordset会以向前的游标打开,与SQLserver连用时,我们称之为"firehose"。此连接会一直打开,查询结果会尽快打开,而这种只读方式下是不能执行事务的。

像上面几中情况出错的原因都是由于在"firehose"模式,command对象的activeconnection的游标模式是readonly的。

改变"firehose"的方法有如下几种:

1.设定connection的游标类型不是向前只读。

2.在开始事务之前关闭使用同一连接的recordset对象。

九、用Insertinto还是Addnew?

Addnew实质上是封装了Insertinto,所以速度会比Insertinto慢。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类