ASP技术点.docx

上传人:b****6 文档编号:6953596 上传时间:2023-01-13 格式:DOCX 页数:12 大小:21.67KB
下载 相关 举报
ASP技术点.docx_第1页
第1页 / 共12页
ASP技术点.docx_第2页
第2页 / 共12页
ASP技术点.docx_第3页
第3页 / 共12页
ASP技术点.docx_第4页
第4页 / 共12页
ASP技术点.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

ASP技术点.docx

《ASP技术点.docx》由会员分享,可在线阅读,更多相关《ASP技术点.docx(12页珍藏版)》请在冰豆网上搜索。

ASP技术点.docx

ASP技术点

1、下面的代码演示了如何在服务端获取来自客户端浏览器中某一个图片的x,y坐标,注意input控件的类型是image类型。

以下为引用的内容:

<%ImageMap.x=<%=Request("ImageMap.x")

ImageMap.y=<%=Request("ImageMap.y")%>

2、利用ADODB.Stream对象,在IE浏览器中下载服务端上的各类文件。

即直接提示用户下载而不是由浏览器打开某些文件。

注意,下面的代码拷贝到ASP文件中后,不要再添加一些非ASP代码在页面中:

如HTML和javascript客户端的代码。

以下为引用的内容:

<%

'--------------------------------------------

Response.Buffer=True

DimstrFilePath,strFileSize,strFileName

ConstadTypeBinary=1

strFilePath="文件路径"

strFileSize=...文件大小,可选

strFileName="文件名"

Response.Clear

'8*******************************************8

'需要在你的服务器上安装MDAC2.6或MDAC2.7

'8*******************************************8

SetobjStream=Server.CreateObject("ADODB.Stream")

objStream.Open

objStream.Type=adTypeBinary

objStream.LoadFromFilestrFilePath

strFileType=lcase(Right(strFileName,4))'文件扩展名

'通过文件扩展名判断Content-Types

SelectCasestrFileType

Case".asf"

ContentType="video/x-ms-asf"

Case".avi"

ContentType="video/avi"

Case".doc"

ContentType="application/msword"

Case".zip"

ContentType="application/zip"

Case".xls"

ContentType="application/vnd.ms-excel"

Case".gif"

ContentType="image/gif"

Case".jpg","jpeg"

ContentType="image/jpeg"

Case".wav"

ContentType="audio/wav"

Case".mp3"

ContentType="audio/mpeg3"

Case".mpg","mpeg"

ContentType="video/mpeg"

Case".rtf"

ContentType="application/rtf"

Case".htm","html"

ContentType="text/html"

Case".asp"

ContentType="text/asp"

CaseElse

'HandleAllOtherFiles

ContentType="application/octet-stream"

EndSelect

Response.AddHeader"Content-Disposition","attachment;filename=strFileName

Response.AddHeader"Content-Length",strFileSize

Response.Charset="UTF-8"'客户端浏览器的字符集UTF-8

Response.ContentType=ContentType

Response.BinaryWriteobjStream.Read

Response.Flush

objStream.Close

SetobjStream=Nothing

%>

3、提升ASP页面的响应速率

在你的ASP页面的第一行加入:

<%ENABLESESSIONSTATE=False%>

这会关闭session对象,提升你的服务器响应速率,比较常见的问题是一个html页面包含了两个框架页面(至少有一个是ASP页面,并使用了session),这将使得必须等待某一个框架页(当然这个框架页中使用了session)加载完后,另一个框架页面才会显示。

如果你使用代理访问,默认情况下,许多代理服务器不会动态缓存ASP页面内容,加入下面的代码:

以下为引用的内容:

<%

Response.CacheControl="Public"

%>

这行代码会将ASP页面缓存在代理服务器上,从而加快客户端请求动态页面的响应速率,一些不经常变化的ASP页面将直接从代理服务器上取得。

并行查询其优势就是可以通过多个线程来处理查询作业,从而提高查询的效率。

SQLServer数据库为具有多个CPU的数据库服务器提供并行查询的功能,以优化查询作业的性能。

也就是说,只要数据库服务器有多个CPU,则数据库系统就可以使用多个操作系统进程并行执行查询操作,来加速完成查询作业。

一、并行查询三步走

并行查询作业在数据库中,主要经过三个步骤。

首先,数据库会判断是否需要进行并行查询。

在数据库中有一个查询优化器,会对SQL语句进行优化,然后数据库才会去执行查询语句。

而这个查询器在对SQL语句进行查询优化时,其中一个动作就是判断是否需要对SQL语句进行查询优化。

也就是说,并不是所有的SQL查询语句都可以从并行查询中获取收益。

如果查询优化器认为查询语句可以从并行查询中获取收益的话,则就会将交换运算符插入到查询执行计划中,为并行查询做准备。

故哪些语句需要采用并行查询,哪些不需要,这不用数据库管理员关心。

数据库查询优化器会帮管理员作出这个决定。

数据库管理员需要清楚的是,在哪些情况下,数据库SQL优化器会认为不宜采用并行查询。

通常情况下,只要满足以下条件的任何一个,则就不会执行并行查询。

一是对于特定的查询,查询优化器认为串行查询执行计划要快于任何可能的并行执行计划;二是查询的串行执行成本并不高,不需要进行并行查询;三是查询中包含无法并行运行的标量运算符或者关系运算符。

若从数据库管理员的角度讲,第三个条件对我们具有最大的影响。

当数据库预计未来可能利用并行查询来提高数据库性能时,则在数据库设计时,就需要注意避免使用那些无法在并行查询功能中使用的运算符。

因为某些关系运算符或者逻辑运算符可能会要求查询计划一定要在串行模式中进行,或者部分需要在串行模式下进行。

如此的话,查询优化器就不会利用并行查询功能来提高查询语句的性能。

这是数据库管理员在数据库设计时必须要考虑到的一个细节问题。

其次,确定并行的进程数。

当查询优化器在查询语句中插入交叉运算符之后,数据库就会执行并行查询。

并行查询在执行计划时可以使用多个线程。

此时,就又遇到了一个问题,数据库会把这个查询作业分成几个进程操作呢?

此时,数据库管理员就需要知道上什么叫做并行度。

其实。

在处理并行查询的时候,数据需要知道最大可使用的进程与实际使用的进程。

而最大可使用的进程就叫做并行度。

这个并行度的值是在服务器级别中进行设置,也可以通过系统存储过程来进行修改。

但是,最大可使用进程数不一定等于实际是用进程数。

实际是用进程数是数据库在查询计划执行时初始化的时候确定的。

也就是说,这不用数据库管理员去额外的设定。

数据库系统会自动根据计划的复杂程度来确定合理的进程数目。

当然其实际采用的进程数不能够超过并行度,即最大可以使用的进程数。

最后执行查询。

当以上内容确定好之后,数据库就会执行具体的查询语句。

在这一步中,需要注意一个问题。

数据库管理员还可以在查询语句中指定MAXDOP查询提示来修改这个进度值。

也就是说,如果某个查询作业数据库管理员认为可能会耗时比较久,就可以为这个查询作业设置比较大的进度值。

当利用MAXDOP查询提示设置这个并行进度值之后,它会覆盖预先设置的默认值。

从而实现针对单个查询语句设置额外的进度值,以提高某些特殊查询作业的性能。

二、并行查询中需要注意的内容

注意点一:

需要注意硬件方面的限制。

并行查询是数据库提高查询性能的一个有力举措。

不过其往往受到比较大的约束。

如上面提高的一些基于成本考虑之外,还有一些硬性的限制。

如通常情况下,只有在数据库服务器有多个微处理器(CPU)的情况下数据库才会考虑执行并行查询。

也就是受,只有具有多个CPU的计算机才能够使用并行查询。

这是一个硬性的限制条件。

另外在查询计划执行过程中,数据库还会判断当时是否有足够多的线程可以使用。

每个查询操作都要求一定的线程数才能够执行;而且执行并行计划比执行串行计划需要更多的线程,所需要的线程数也会随着并行度的提高而提高。

如果在并行计划执行的时候,当时数据库服务器没有足够的线程让并行计划使用的话,数据库引擎就会自动减少并行度,甚至会放弃并行查询而改为串行计划。

所以说,数据库是否能够执行并行查询,要受到其硬件的限制。

为此,如果企业真的需要通过并行查询来提高数据库性能的话,则管理员就需要根据情况来调整硬件配置。

注意点二:

不建议对所有查询都使用并行查询。

通常情况下,笔者认为最好只对大型表的连接查询、大量数据的聚合操作、大型结果集的重复排序等等操作才应用并行查询的功能。

如果在这些操作上执行并行查询的话,那么其改善数据库性能的效果是非常明显的。

相反,如果对于简单查询执行并行查询的话,可能执行并行查询所需要的额外协调工作会大于其潜在的性能提升。

所以,数据库管理员在确定是否需要执行并行查询功能的话,需要慎重。

笔者的建议是,在数据库服务器级别上,最好不要设置并行查询。

即把并行度设置为1或者一个比较小的值。

然后对于一些特殊的查询操作,利用MAXDOP查询提示来设置最大的可使用进程数。

如此的话,可能会更加的合理。

如果有时候数据库管理员不知道是否需要采用并行查询功能的话,则可以通过数据库自带的统计功能进行判断。

为了区别并行查询计划到底有没有从并行查询中受益,数据库引擎可以将执行查询的估计开销与并行查询的开销阀值进行比较。

并行计划只有对需时较长的查询通常更加有益;因为其性能优势将抵消初始化、同步和终止并行计划所需的额外时间开销。

注意点三:

数据库会根据查询所涉及到的行数来判断是否要并行查询。

上面谈到,最好对大型表的连接查询、大量数据的聚合操作、大型结果集的重复排序等等操作才应用并行查询的功能。

因为只有如此,并行查询带来的收益才会超过其付出的代价。

但是,并不是说连接查询、聚合操作、排序等作业都适合采用并行查询。

当数据库在考虑并行查询计划的时候,查询优化器还会去确定所涉及到的行数。

如果所涉及到的行数台少,则将不会考虑执行并行查询计划。

而会采用串行方式执行查询语句。

如此的话,可以避免因为启动、分发、协调的开销大大超过并行执行作业所带来的收益。

这本来是一个不错的设计,但是也会给数据库管理员带来一定的麻烦。

如现在数据库管理员想要测试并行查询到底可以在多大程度上影响查询操作,就有点麻烦。

因为其有数据量的限制。

如果数据库管理员需要进行这个测试,还不得不先在数据库系统中导入足够多的数据才行。

这就限制了数据库管理员的测试操作。

不过话说回来,这个机制仍然是不错的。

因为数据库管理员不用去考虑,当数据库规模到多大的时候采用并行查询。

注意点四:

同一个操作在不同时候会采用不同的进程数。

上面说到过,并行查询到第采用多少进程数除了跟操作的复杂程度相关外,还直接跟当时的服务器状态相关,如是否有足够的进程数等等。

所以,在不同的时间,即使是相同的数据、相同的操作,其并行查询所用的进程数也可能不同。

其所需要的时间也就不同了。

因为只有在并行查询真正进行的时候,数据库引擎才去收集当前系统的工作负荷,如进程数,和其他对一些配置信息,然后数据库才确定最佳的并行进程数。

从查询开始,到这个查询作业结束,将一直采用这个进程数。

如果下次要继续查询,则数据库引擎会继续收集这些信息。

此时,如果系统工作负荷有所改善,在数据库可能会采用更多的进程数来执行这个查询。

从而查询作业的性能会更加的高。

相反,如果此时系统的负荷比前一次查询要重了,则数据库就可能会采用比较少的进程来处理这个作业。

此时,第二次查询的速度反而更慢了。

所以,如果在数据库服务器中同时部署了其他应用,则其他应用所占用系统资源的多少也会对并行执行产生难以估测的影响。

ASP备份SQL数据库

数据库操作_快乐学习网

<%ifaction="restore"then%>准备恢复数据库。

<%elseifaction="backup"then%>准备备份数据库。

<%else%>

选择操作:

备份 

恢复<%endif%>


数据库名:


文件路径:

(备份或恢复的文件路径)

<%

’SQLServer数据库的备份与恢复!

dimsqlserver,sqlname,sqlpassword,sqlLoginTimeout,databasename,bak_file,act

sqlserver="localhost"’sql服务器

sqlname="sa"’用户名

sqlpassword="sa"’密码

sqlLoginTimeout=15’登陆超时

databasename=trim(request("databasename"))

bak_file=trim(request("bak_file"))

bak_file=Server.MapPath("backup/"&bak_file)

act=lcase(request("action"))

ifdatabasename=""then

response.write"inputdatabasename"

else

ifact="backup"then

Setsrv=Server.CreateObject("SQLDMO.SQLServer")

srv.LoginTimeout=sqlLoginTimeout

srv.Connectsqlserver,sqlname,sqlpassword

Setbak=Server.CreateObject("SQLDMO.Backup")

bak.Database=databasename

bak.Devices=Files

bak.Files=bak_file

bak.Action=0

bak.Initialize=1

’bak.ReplaceDatabase=True

bak.SQLBackupsrv

iferr.number>0then

response.writeerr.number&"
"

response.writeerr.description&""

endif

Response.write"备份成功!

"

srv.disconnect

Setsrv=nothing

Setbak=nothing

elseifact="restore"then

’恢复时要在没有使用数据库时进行!

Setsrv=Server.CreateObject("SQLDMO.SQLServer")

srv.LoginTimeout=sqlLoginTimeout

srv.Connectsqlserver,sqlname,sqlpassword

Setrest=Server.CreateObject("SQLDMO.Restore")

rest.Action=0’fulldbrestore

rest.Database=databasename

rest.Devices=Files

rest.Files=bak_file

rest.ReplaceDatabase=True’Forcerestoreoverexistingdatabase

iferr.number>0then

response.writeerr.number&"
"

response.writeerr.description&""

endif

rest.SQLRestoresrv

Response.write"恢复成功!

"

srv.disconnect

Setsrv=nothing

Setrest=nothing

else

Response.write"没有选择操作"

endif

endif

%>

5、用ASP代码写IIS日志

以下为引用的内容:

<%

Response.AppendToLog"数据库正在被访问"

%>

执行这段代码后,在你的IIS日志中可能会出现下面的字符串:

以下为引用的内容:

127.0.0.1,-,01/01/00,12:

00:

34,W3SVC1,WEBSERVER,

127.0.0.1,161342,485,228,200,0,get,/somefile.asp,数据库正在被访问

注意:

由于日志文件中的内容是按逗号分隔,所以写入的日志内容应避免使用逗号。

ASP实例:

利用缓存提高数据显示效率

实例演示:

先建立一个简单的数据库,写个function读取一下,写入一个dim变量temp中:

ASP代码

以下为引用的内容:

<%

FunctionDisplayRecords()

Dimsql,conn,rs

sql="SELECTid,[szd_f],[szd_t]FROMadmin"

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

conn.Open"DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ="&Server.MapPath("db.mdb")

Setrs=Server.CreateObject("ADODB.Recordset")

rs.Opensql,conn,1,3

IfNotrs.EOFThen

Dimtemp

temp="

temp=temp&"border=""1""bordercolor=""silver"""

temp=temp&"cellspacing=""2""cellpadding=""0"">"

temp=temp&"

temp=temp&">ID操作"

temp=temp&"数值"

WhileNotrs.EOF

temp=temp&""

temp=temp&rs("ID")&""&rs("szd_f")

temp=temp&""&rs("szd_t")

temp=temp&""

rs.MoveNext

Wend

temp=temp&""

DisplayRecords=temp

Else

DisplayRecords="DataNotAvailable."

EndIf

rs.Close

conn.Close

Setrs=Nothing

Setconn=Nothing

EndFunction

'写入缓存

FunctionDisplayCachedRecords(Secs)

DimretVal,datVal,temp1

retVal=Application("cache_demo")

datVal=Application("cache_demo_date")

IfdatVal=""Then

datVal=DateAdd("s",Secs,Now)

EndIf

temp1=DateDiff("s",Now,datVal)

Iftemp1>0AndretVal<>""Then

DisplayCachedRecords=retVal

'DebuggingCode:

Response.Write"利用缓存读取数据"

Respo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1