asp2

来源:百度文库 编辑:神马文学网 时间:2024/04/30 12:56:53
详细讲解ASP脚本循环语句日期:2007-03-10
用ASP实现距指定日期的倒记时程序源码日期:2007-03-10
asp之字符串操作函数日期:2007-03-08
给万博系统的新闻系统增加分页功能[配有详细说明]日期:2007-03-04
讲解ASP方面的知识比较全的asp学习教程日期:2007-03-04
asp,VBscript语法错误,史上最全最详细最精确日期:2007-03-03
asp下同一空间多绑多哥域名的方法日期:2007-03-03
简单的ASP分页代码(测试正确)日期:2007-03-03
javascript asp教程 日期相关日期:2007-03-02
javascript asp教程添加和修改日期:2007-03-02
javascript asp教程More About Recordsets日期:2007-03-02
javascript asp教程Recordset记录日期:2007-03-02
javascript asp教程创建数据库连接日期:2007-03-02
javascript asp教程错误处理日期:2007-03-02
javascript asp教程服务器对象日期:2007-03-02
javascript asp教程第十三课--include文件日期:2007-03-02

javascript asp教程第十二课---session对象 ASP常用技巧 (1)2009-08-17 13:26:47  www.hackbase.com  来源:互联网
1.获得系统时间: <%=now()%> 2.取得来访用的IP: <%=request.servervariables("remote_host")%> 3.获得系统,浏览器版本: <script> window.document.write("版本:"+navigator.appName+navigat ...
1.获得系统时间:
<%=now()%>
2.取得来访用的IP:
<%=request.servervariables("remote_host")%>
3.获得系统,浏览器版本:
<script>
window.document.write("版本:"+navigator.appName+navigator.appVersion+" browser.")
script>
4.去除IE混动条:
 

5.进入网站,跳出广告:
<script language="javascript">

window.open(''http://www.******.com<;I>&#39;','''',''height=200,width=300,top=0,left=30'');
// -->
script>
6.随机数:
<%randomize%>
<%=(int(rnd()*n)+1)%>
N为可改变数
7.向上混动代码:
hhhhhhhhhhhhhhhhhhh
8.自动关闭网页:
<script LANGUAGE="javascript">

script>

本页10秒后自动关闭,请注意刷新页面


9.随机背景音乐:
<%randomize%>
 
可以修改数字,限制调用个数,我这里是60个.
10.自动刷新本页面:
<script
 
script>
11.ACCESS数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
'更改数据库名字
db="data/dvBBS5.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
'如果你的服务器采用较老版本Access驱动,请用下面连接方法
'connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End function
%>
12.SQL数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
connstr="driver={SQL Server};server=HUDENQ-N11T33NB;uid=sa;pwd=xsfeihu;database=dvbbs" 
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End function
%>
13.用键盘打开网页代码:
<script language="javascript">
function ctlent(eventobject)
{
if((event.ctrlKey && window.event.keyCode==13)||(event.altKey && window.event.keyCode==83))
{
window.open('网址','','')
}
}
script> 
这里是Ctrl+Enter和Alt+S的代码 自己查下键盘的ASCII码再换就行
14.让层不被控件复盖代码:
# 前面 
# 后面 
<iframe width=0 height=0>iframe>

<iframe height=100% width=100%>iframe>

15.FLASH广告代码:

16.VBS弹出窗口小代码:
<script language=vbscript>
msgbox"你还没有注册或登陆论坛","0","精品论坛"
location.href = "login.asp"
script> 简单介绍
asp是很简单的,以至于许多的研发者不会去思考错误处理。错误处理能够让您的应用程式更加合理。我看到过很多个用asp编写的商业网站,大多数都忽略了错误处理。
错误的类型
有三种主要的错误类型:
编译错误:
这种错误出现一般都是代码的语法问题。因为编译错误而导致辞asp停止运行。
运行错误
这个错误是发生在您准备运行asp时的。例如:假如您试图给一个变量赋值,但是却超出了该变量允许的范围。
逻辑错误
逻辑错误是最难被发现的,这种错误经常是一种结构错误,电脑是发现不了的。这就需要我们彻头彻尾地检查我们的代码。
因为编译错误一般是和逻辑错误一起发生的,一般都能显示出来,所以我们担心的就只是运行错误。他都终止asp的运行,而且给用户丢下一堆很不友好的文字。
那么我们要怎样处理运行错误呢!?我们先来看看,asp唯一提供给我们的错误命令---on error resume next(这里提醒一下初学者,在asp中只有on error resume next语句,没有on error resume goto语句)
假如您不使用on error resume next语句的话,一切运行错误都会发生,这个是致命的,那么就会有一段错误代码“展现”给用户,而且asp程式也会停止。下面就是个错误代码:
microsoft ole db provider for odbc drivers error 80004005
[microsoft][odbc driver manager] data source name not found and no default driver specified
/test.asp, line 60
当我们在程式最上面使用on error resume next语句时,任何的错误都会被忽略,程式会自动执行下一条语句。这样程式就会完全执行,出错后用户也不会看到出错信息。但是这样也有不好的地方,那就是假如程式没有按照您想像的执行的话,您就很难找到到底是哪里出了问题,所以您就得在必要的地方对错误进行处理。
处理错误
在asp中,处理错误的最好的办法就是在程式最底端放上代码来处理错误。我也推荐在每个asp程式都使用缓冲区。这样的话,假如错误发生,页面就会停止,页面内容也会被清除,这样用户就不会看到错误信息,对您们的抱怨也就少了!下面是个例子:
<%@ language="vbscript" %>
<% 配置buffer为true
response.buffer = true
开始错误处理
on error resume next
%>
<% 错误处理
if err.number <> 0 then
清除页面
response.clear
显示错误信息给用户
%>





an error occurred in the execution of this asp page

please report the following information to the support desk


page error object

错误 number: <%= err.number %>

错误信息: <%= err.description %>

出错文档: <%= err.source %>

出错行: <%= err.line %>



<%end if%>
您们上面看到了,我首先配置on error resume next ,这样出现错误就不会影响程式的执行。错误处理和数据库
在错误处理中加入数据库的执行是很复杂的。假若我们有一个程式,有很多的命令去向数据库中添加记录,假如insert/update在程式的最底部执行,假如我们前面又错误发生,那就完了!我们就会向数据库中添加了一个错误的信息。因为我们用了on error resume next 一切的错误都被忽略了!即使前面出错,程式依旧会向数据库中添加数据的。
为避免这种情况,我们就先得做些手脚,正确处理的方法如下:if err.number = 0 and objconnection.errors.count = 0 then这里才能执行语句,因为没有错误
set rstresults = dbdata.execute(txtsql)end if 更多高级的处理办法
当一个错误发生时,您们也能够显示更多的错误信息。下面是同时处理数据库和页面错误的例子,有了他我们一下就能发现我们程式中的任何错误。(由于有些地方我觉得英文更能说时问题,所以没有翻译)。
<%
if err.number <> 0 then
response.clear
select case err.number
case 8 指定错误的number
在这里处理自定义错误case else 一般错误if isobject(objconnection) then
if objconnection.errors.count > 0 then
%>database connection object<% for intloop = 0 to objconnection.errors.count - 1 %>error no: <%= objconnection.errors(intloop).number %>

description: <%= objconnection.errors(intloop).description %>

source: <%= objconnection.errors(intloop).source %>

sqlstate: <%= objconnection.errors(intloop).sqlstate %>

nativeerror: <%= objconnection.errors(intloop).nativeerror %>

<% next
end ifend if
if err.number <> 0 then
%>page error object

error number <%= err.number %>

error description <%= err.description %>

source <%= err.source %>

linenumber <%= err.line %>

<% end if
end select
end if
%>
上面的例子让我们一下了处理了很多在数据库中出现的问题,这个在我们日常编程也是常用的!我们也应该看到那个select case 语句,他能让我们来处理特定的错误。
redirect 和错误处理
有一点我们就当注意一下,就是我们常用到的redirect对象,假如一个页面中出现了redirect对象,那么错误处理就失去了意义。所以在转向之前我们还得处理一下,如下:if err.number = 0 and objconnection.errors.count = 0 then
response.clear
response.redirect ?lt;url here>?end if 把代码变得更整齐
为了让代码变得更整齐,首先把错误处理的文档放在一个包含文档中。这样您就能够在任何文档中使用他。这样修改也方便。
在您程式的最上方加入(当然在语言声明之后)on error resume next语句。
在您执行sql以前进行错误检查。
使用redirect以前也要进行错误处理。
让您处理错误的包含文档在代码的最上面
ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件
MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)-->sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态,或表不存在于conn打开的数据库中)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E14)-->sql语句出错(字段名错误,或数据类型不匹配)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E07)-->sql语句出错(要插入或更新的字段的类型与变量数据类型不匹配)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E57)-->sql语句出错(要插入或更新的数据溢出)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E10)-->sql语句出错(update字段名或要更新的数据类型错误)
MicrosoftOLEDBProviderforODBCDrivers(0x80004005)-->sql语句出错(要插入或更新的字段的数值不能为空值)
MicrosoftOLEDBProviderforODBCDrivers(0x80004005) -->打开数据库出错,没有在指定目录发现数据库
MicrosoftOLEDBProviderforODBCDrivers(0x80040E37)-->没有发现表
MicrosoftVBscript运行时错误(0x800A000D)-->错误引用rs变量(rs对像已关闭或未定义)
MicrosoftVBscript运行时错误(0x800A01C2)-->vbscript脚本错误(vbscript语句出错)
MicrosoftVBscript运行时错误(0x800A0006)-->vbscript脚本错误(溢出错误)
MicrosoftVBscript编译器错误(0x800A040E)-->缺少loop
MicrosoftVBscript编译器错误(0x800A03EA)-->缺少if或endif
MicrosoftVBscript编译器错误(0x800A03EE)--> 语句未结束(缺少")")
MicrosoftVBscript编译器错误(0x800A03F6)-->if语句出错(缺少endif)
MicrosoftVBscript运行时错误(0x800A005B)-->缺少set
MicrosoftVBscript运行时错误(0x800A0005)-->变量未定义
MicrosoftVBscript编译器错误(0x800A03F9)-->if语句缺少then
MicrosoftVBscript编译器错误(0x800A0411)-->dim语句定义错误
MicrosoftVBscript编译器错误(0x800A0408)-->sql语句错误(?????????????????)
Microsoft VBScript 运行时错误 (0x800A01B6)错误原因:set rs=server.create......你少了 set
ADODB.Recordset(0x800A0BB9)-->sql语句出错(sql语句或conn语句未定义或对一个rs属性进行赋值时发生错误)
ADODB.Recordset(0x800A0CC1)-->rs对像出错(rs对像本身不存在或错误地引用了一个不存在的字段名)
ADODB.Recordset(0x800A0BCD)-->rs对像出错(记录集中没有记录却对记录集进行操作)
ADODB.Recordset(0x800A0E78)-->rs对像出错(记录集不存在,缺少rs.open语句)
ADODB.Recordset(0x800A0CC1) -->rs对像出错(引用了一个不存在的字段名)
ADODB.Recordset(0x800A0E7D)-->conn定义错误
ADODB.Recordset(0x800A0CB3)-->数据库以只读方式打开,无法更新数据 如果 VBScript 语句结构违反了一个或多个 VBScript 脚本语言语法规则,就会产生 VBScript 语法错误。
错误通常在执行程序前,编译程序时产生。 以下是53个语法错误:
错误编号 描述
十进制 十六进制 说明
1001 800A03E9 内存不足
1002 800A03EA 语法错误
1003 800A03EB 缺少“:”
1005 800A03ED 需要 '('
1006 800A03EE 需要 ')'
1007 800A03EF 缺少“]”
1010 800A03F2 需要标识符
1011 800A03F3 需要 '='
1012 800A03F4 需要 'If'
1013 800A03F5 需要 'To'
1014 800A03F6 需要 'End'
1015 800A03F7 需要 'Function'
1016 800A03F8 需要 'Sub'
1017 800A03F9 需要 'Then'
1018 800A03FA 需要 'Wend'
1019 800A03FB 需要 'Loop'
1020 800A03FC 需要 'Next'
1021 800A03FD 需要 'Case'
1022 800A03FE 需要 'Select'
1023 800A03FF 需要表达式
1024 800A0400 需要语句
1025 800A0401 需要语句的结束
1026 800A0402 需要整数常数
1027 800A0403 需要 'While' 或 'Until'
1028 800A0404 需要 'While,'、 'Until,' 或语句未结束
1029 800A0405 需要 'With'
1030 800A0406 标识符太长
1031 800A0407 无效的数
1032 800A0408 无效的字符
1033 800A0409 未结束的串常量
1034 800A040A 未结束的注释
1037 800A040D 无效使用关键字 'Me'
1038 800A040E 'loop' 没有 'do'
1039 800A040F 无效 'exit' 语句
1040 800A0410 无效 'for' 循环控制变量
1041 800A0411 名称重定义
1042 800A0412 必须为行的第一个语句
1043 800A0413 不能赋给非Byval参数
1044 800A0414 调用 Sub 时不能使用圆括号
1045 800A0415 需要文字常数
1046 800A0416 需要 'In'
1047 800A0417 需要 'Class'
1048 800A0418 必须在一个类的内部定义
1049 800A0419 在属性声明中需要 Let , Set 或 Get
1050 800A041A 需要 'Property'
1051 800A041B 参数数目必须与属性说明一致
1052 800A041C 在类中不能有多个缺省的属性/方法
1053 800A041D 类初始化或终止不能带参数
1054 800A041E Property Let 或 Set 至少应该有一个参数
1055 800A041F 不需要的 'Next'
1056 800A0420 只能在 ‘Property’ 或 ’Function’ 或 ’Sub’ 上指定 ’Default’
1057 800A0421 说明 'Default' 必须同时说明 'Public' "
1058 800A0422 只能在 Property Get 中指定 'Default' VBScript 运行时错误
如果 VBScript 脚本执行系统无法实施的操作,则会产生 VBScript 运行时错误。只有在运行脚本、为变量表达式赋值或
分配内存时,才会产生 VBScript 运行时错误。 以下是65个运行时错误:
错误编号 描述
十进制 十六进制 说明
5 800A0005 无效过程调用或参数
6 800A0006 溢出
7 800A0007 内存不足
9 800A0009 下标越界
10 800A000A 该数组为定长的或临时被锁定
11 800A000B 被零除
13 800A000D 类型不匹配
14 800A000E 字符串空间溢出
17 800A0011 无法执行请求的操作
28 800A001C 堆栈溢出
35 800A0023 未定义 Sub 或 Function
48 800A0030 加载 DLL 错误
51 800A0033 内部错误
52 800A0034 坏文件名或数
53 800A0035 文件未找到
54 800A0036 坏文件模式
55 800A0037 文件已经打开
57 800A0039 设备I/O错误
58 800A003A 文件已经存在
61 800A003D 磁盘空间已满
62 800A003E 输入超出文件尾
67 800A0043 文件太多
68 800A0044 设备不可用
70 800A0046 权限禁用
71 800A0047 磁盘未准备好
74 800A004A 不能用不同的驱动器重新命名
75 800A004B 路径/文件访问错误
76 800A004C 路径未找到
91 800A005B 未设置对象变量
92 800A005C For 循环未初始化
94 800A005E 非法使用 Null
322 800A0142 不能建立所需临时文件
424 800A01A8 需要对象
429 800A01AD ActiveX 部件无法创建对象
430 800A01AE 类不支持自动化
432 800A01B0 在自动化操作中未找到文件名或类名
438 800A01B6 对象不支持该属性或方法
440 800A01B8 Automation错误
445 800A01BD 对象不支持此操作
446 800A01BE 对象不支持指定的参数
447 800A01BF 对象不支持当前的区域设置
448 800A01C0 未找到命名参数
449 800A01C1 参数不可选
450 800A01C2 错误的参数个数或无效的参数属性值
451 800A01C3 对象不是一个集合
453 800A01C5 指定的dll函数未找到
455 800A01C7 代码源锁错误
457 800A01C9 这个键已经是本集合的一个元素关联
458 800A01CA 变量使用了一个 VBScript 中不支持的自动化(Automation)类型
462 800A01CE 远程服务器不存在或不能访问
481 800A01E1 无效图片
500 800A01F4 变量未定义
501 800A01F5 违法的分配
502 800A01F6 脚本对象不安全
503 800A01F7 对象不能安全初始化
504 800A01F8 对象不能安全创建
505 800A01F9 无效的或不合格的引用
506 800A01FA 类未被定义
507 800A01FB 发生异常
5016 800A1398 需要正则表达式对象
5017 800A1399 正则表达式中的语法错误
5018 800A139A 错误的数量词
5019 800A139B 在正则表达式中需要 ']'
5020 800A139C 在正则表达式中需要 ')'
5021 800A139D 字符集越界
32811 800A802B 元素未找到
Request对象功能是从客户端得到数据,常用的三种取得数据的方法是:Request.Form、Request.QueryString,Request。其第三种是前两种的一个缩写,可以取代前两种情况。而前两种主要对应的Form提交时的两种不同的提交方法:分别是Post方法和Get方法。
        Request 对象的属性和方法比较多,常用的几个为:UserAgent 传回客户端浏览器的版本信息,UserHostAddress 传回远方客户端机器的主机IP 地址,UserHostName 传回远方客户端机器的DNS 名称,PhysicalApplicationPath 传回目前请求网页在Server 端的真实路径。 从浏览器获取数据
        利用Request方法,可以读取其他页面提交过来的数据。提交的数据有两种形式:一种是通过Form表单提交过来,另一种是通过超级链接后面的参数提交过来,两种方式都可以利用Request对象读取。
<%@ Page Language="C#"%>
<%
    string strUserName = Request["Name"];
    string strUserLove = Request["Love"];
%>
姓名:<%=strUserName%>
爱好:<%=strUserLove%>


姓名:


兴趣:



得到客户端的信息
        利用Request对象内置的属性,可以得到一些客户端的信息,比如客户端浏览器版本和客户端地址等等<%@ Page Language="C#"%>
客户端浏览器:<%=Request.UserAgent %>
客户端IP地址:<%=Request.UserHostAddress %>
当前文件服务端物理路径:<%=Request.PhysicalApplicationPath %>Request 对象的属性  UserLanguages 客户端主机所使用的语言  UserHostName 客户端主机的DNS名称  userHostArrress 客户端主机的IP地址  UserAgent 客户端浏览器版本  Url 当前要求的URL  TotalBytes 当前输入的容量大小  ServerVariables 网页的Server变量  RequestType 客户端网页的传送方式(Get/Post)  RawUrl 当前页面的U『RL  QueryString 浏览器地址栏后的参数  PhysicalPath 当前网页在服务器端的实际路径  PhysicalApplicationPath 当前在服务器端执行的程序的实际路径  Pathq 当前网页的相对地址  Params 返回QueryString、Form、Cookies、ServerVariables的全部集合          IsSecureConnection 目前联机的安全性  IsAuthenticated 目前联机是否有效  HttpMethod 目前客户端网页的传送方式(Get/Post)  Headers 网页的标题集合  Form 窗体变量  Files 客户端上传的文件  FilePath 当前执行网页的相对地址  Cookies HttpCookieCollection对象集合  ContentType 当前需求的MIME内容类型  ContentEncoding 客户端浏览器的字符设置 -  ConnectionlD 客户端所提出的网页浏览请求的联机的ID  ClientCertificate 客户端安全认证信息  Browser 客户端浏览器的信息  AnnlicationPath 当前运行程序的服务器端虚拟目录-ASP重點整理 ASP重点整理 HTML語言重點 HTML语言重点        HTML 語言中的註解 HTML 语言中的注解 傳送資料至 ASP 传送资料至 ASP
               輸入資料傳送至 ASP 檔案帳號:

输入资料传送至 ASP 档案帐号:

      文字輸入區塊 文字输入区块
密碼:

密码:

   密碼輸入區塊 密码输入区块
                    傳送資料按鈕 传送资料按钮


response.redirect “example.asp” à 將網頁轉向到其它的網址 response.redirect “example.asp” à 将网页转向到其它的网址
response.write “ 進入 ” à 傳資料至 menu.asp response.write “ 进入 ” à 传资料至 menu.asp 接收 ASP 傳來的資料 接收 ASP 传来的资料    插入存放在 Web 伺服器主目錄的 lib.inc 函式檔 插入存放在 Web 伺服器主目录的 lib.inc 函式档
   將同一個子目錄的 lib.inc 檔案插入 将同一个子目录的 lib.inc 档案插入
name=request(“name”) , pws=request(“pws”) name=request(“name”) , pws=request(“pws”)   取得傳遞的內容 取得传递的内容
Session(“username”)=” 陳小明 ” à 建立 Session 物件 Session(“username”)=” 陈小明 ” à 建立 Session 物件
Session.Abandon à 結束 Session ,也就是登出網站。 Session.Abandon à 结束 Session ,也就是登出网站。 開啟資料庫檔案 开启资料库档案 Set conn=Server.CreateObject("ADODB.Connection") Set conn=Server.CreateObject("ADODB.Connection")
Conn.open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("資料庫.mdb") & ";Jet OLEDB:Database Password=" & "xxxxxxxx" Conn.open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("资料库.mdb") & ";Jet OLEDB:Database Password=" & "xxxxxxxx"
set rs=Server.CreateObject("ADODB.Recordset") set rs=Server.CreateObject("ADODB.Recordset")
set rs1=Server.CreateObject("ADODB.Recordset") set rs1=Server.CreateObject("ADODB.Recordset")
set rs2=Server.CreateObject("ADODB.Recordset") set rs2=Server.CreateObject("ADODB.Recordset")
sql="where name like '%" & i_name & "%' or department=" & i_department sql="where name like '%" & i_name & "%' or department=" & i_department
rs.open "select * from 資料表1 " & sql & " order by欄位名稱" , Conn , 3 , 2 rs.open "select * from资料表1 " & sql & " order by栏位名称" , Conn , 3 , 2
rs1.open "select * from 資料表2" , Conn , 3 , 2 rs1.open "select * from资料表2" , Conn , 3 , 2
rs2.open "select * from 資料表3" , Conn , 3 , 2 rs2.open "select * from资料表3" , Conn , 3 , 2
addsql="insert Into 閱讀記錄 (id, ip, readdate) values (" & sqlstr(rs("id")) à 建立新增記錄的 SQL 指令 addsql="insert Into 阅读记录 (id, ip, readdate) values (" & sqlstr(rs("id")) à 建立新增记录的 SQL 指令
conn.Execute conn.Execute   addsql à 執行新增記錄的 SQL 指令 addsql à 执行新增记录的 SQL 指令
rs1.close  關閉資料庫的連接,set rs1=nothing  釋放rs1物件所佔用的空間 rs1.close关闭资料库的连接,set rs1=nothing释放rs1物件所占用的空间
conn.close 關閉資料庫連接,set conn=nothing 釋放conn物件所佔用的空間 conn.close关闭资料库连接,set conn=nothing释放conn物件所占用的空间 資料庫的記錄處理 资料库的记录处理 rs.BOF à 第一筆記錄之前, rs.EOF à 最後一筆記錄之後 rs.BOF à 第一笔记录之前, rs.EOF à 最后一笔记录之后
rs.AbsolutePosition=N à 目前指標的位置,如為負數表示為 BOF 或 EOF rs.AbsolutePosition=N à 目前指标的位置,如为负数表示为 BOF 或 EOF
rs.RecordCount à 記錄的總筆數 rs.RecordCount à 记录的总笔数
rs.pagesize=10 à 設每頁 10 筆, rs.absolutepage à 目前所在頁, rs.pagecount à 總頁數 rs.pagesize=10 à 设每页 10 笔, rs.absolutepage à 目前所在页, rs.pagecount à 总页数
rs.delete à 刪除一筆, rs.update à 更新, rs.cancelupdate à 取消 rs.delete à 删除一笔, rs.update à 更新, rs.cancelupdate à 取消
rs.addnew à 新增一筆資料,再用 rs(“ 欄位 ”)=” 資料 ” ,再用 rs.update 更新或 rs.cancelupdate 取消 rs.addnew à 新增一笔资料,再用 rs(“ 栏位 ”)=” 资料 ” ,再用 rs.update 更新或 rs.cancelupdate 取消
rs.movenext à 下一筆, rs.moveprevious à 上一筆, rs.movefirst à 第一筆, rs.movelast à 最後一筆 rs.movenext à 下一笔, rs.moveprevious à 上一笔, rs.movefirst à 第一笔, rs.movelast à 最后一笔
rs.close à 關閉 RecordSet 物件 rs.close à 关闭 RecordSet 物件 其它重點 其它重点 for/next 中途離開必需用 if rs.eof then exit for for/next 中途离开必需用 if rs.eof then exit for
取得 IP 位址, IP=request.servervariables(“REMOTE_ADDR”) 取得 IP 位址, IP=request.servervariables(“REMOTE_ADDR”)
response.expires=數字,用來設定網頁保留在客戶端瀏覽器Cache的時間長度,以分鐘為單位,0表不保留 response.expires=数字,用来设定网页保留在客户端浏览器Cache的时间长度,以分钟为单位,0表不保留
response.redirect "網址",連結至其它網頁 response.redirect "网址",连结至其它网页
response.write "字串",顯示某一段字串訊息,總長度不可超過1022個字元 response.write "字串",显示某一段字串讯息,总长度不可超过1022个字元
request.form("表單欄位名稱"),取得表單的某一欄位值,限用POST方法 request.form("表单栏位名称"),取得表单的某一栏位值,限用POST方法
request.querystring("變數名稱"),取得URL之?字元符號之後的文字 request.querystring("变数名称"),取得URL之?字元符号之后的文字
1.记录集关闭之前再次打开:
------------------------------------
sql="select * from test"
rs.open sql,conn,1,1
if not rs.eof then
dim myName
myName=rs("name")
end if
sql="select * from myBook"
rs.open sql,conn,1,1
-------------------------------------
解决:在第二次rs.open之前先关闭 rs.close

set rs1=server.createobject
rs1.open sql,conn,1,12,用SQL关键字做表名或字段名
-------------------------------------
sql="select * from user"
rs.open sql,conn,1,1
-------------------------------------
user为sql关键字
解决:改为
sql="select * from [user]"
3,用锁定方式去进行update
-------------------------------------
sql="select * from [user]"
rs.open sql,conn,1,1
rs.addnew

rs("userName")="aa"
rs.update
-------------------------------------
当前记录集的打开方式为只读
解决:
改为
rs.open sql,conn,1,34,在查询语句中采用的对比字段值与字段类型不符
-----------------------------------------
sql="select * from [user] where id='" & myID & "'"
rs.open sql,conn,1,1
-----------------------------------------
假设表中设计ID为数字型,那么些时出错。
解决:
sql="select * from [user] where id=" & myID5,未检查变量值而出错
-----------------------------------------
sql="select * from [user] where id=" & myID
rs.open sql,conn,1,1
-----------------------------------------
假设myID变量此时值为null,那么sql将成为
sql="select * from [user] where id="
解决:
在前面加上
if isnull(myID) then 出错提示6,未检查变量值类型而出错
-----------------------------------------
sql="select * from [user] where id=" & myID
rs.open sql,conn,1,1
-----------------------------------------
假设id为数字型,myID变量此时值不为null,但为字符,比如myID此时为"aa"
那么sql将成为
sql="select * from [user] where id=aa"
解决:
在前面加上
if isnumeric(myID)=false then 出错提示这也可以有效防止 sql injection 漏洞攻击。7,由于数据库文件所在目录的NTFS权限而引起的'不能更新。数据库或对象为只读"错误。
说明:
WIN2K系统延续了WINNT系统的NTFS权限。
对于系统中的文夹都有默认的安全设置。
而通过HTTP对WWW访问时的系统默认用户是 iusr_计算机名 用户 ,它属于guest组。
当通过HTTP访问时,可以ASP或JSP,也或是PHP或.NET程序对数据进行修改操作:
比如:
当打开某一个文章时,程序设定,文章的阅读次数=原阅读次数+1
执行
conn.execute("update arts set clicks=clicks+1 where id=n")
语句时,如果 iusr_计算机名 用户没有对数据库的写权限时,就会出错.
解决方法:
找到数据库所在目录
右键》属性》安全选项卡》设置 iusr_计算机名 用户的写权限(当然,也可以是everyone
   欢迎光临!今天是2010年10月27日 星期三
 
 首页 基础教程  留言薄制作  神奇FSO  ASP优化  ASP实例  SQL语法  VB教程  安全手册  综合技巧  案头必备  留言  
  案头必备 
 
·ASP中时间函数的使用-1
·ASP中时间函数的使用-2
·ASP中时间函数的使用-3
·ASP编程中20个非常有用的..
·ASP提速技巧
·ASP函数大全-1
·ASP函数大全-2
·ASP函数大全-3
·ASP函数大全-4
·ASP初学者常犯的几个错误
·asp函数大全
·用ASP与ADO查询Web数..
·用ASP访问数据库的几种常见..
·ASP中Cookie使用指南
·最大限度优化你的Asp性能
·使用ASP常见问题解答
 
  ■ 案头必备 > ASP编程中20个非常有用的例子
如果内容很多,请先在本机编辑好,以免session过期导致内容丢失。ASP 编程中 20 个非常有用的例子
1.如何用Asp判断你的网站的虚拟物理路径
答:使用Mappath方法
< p align="center" >< font size="4" face="Arial" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color="#FF0000" size="6" face="Arial" >
< %= Server.MapPath("\")% >
< /font >< /p >
2.我如何知道使用者所用的浏览器?
答:使用the Request object方法
strBrowser=Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strBrowser,"MSIE") < > 0 Then
  Response.redirect("ForMSIEOnly.htm")
Else
  Response.redirect("ForAll.htm")
End If 3.如何计算每天的平均反复访问人数
答:解决方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
显示结果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998 4.如何显示随机图象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
显示
< img src="< %=dpic% >" > 5.如何回到先前的页面
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用图片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" > 6.如何确定对方的IP地址
答:< %=Request.serverVariables("REMOTE_ADDR)% > 7.如何链结到一副图片上
答:< % @Languages=vbscript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% > 8.强迫输入密码对话框
答:把这句话放载页面的开头
< % response.status="401 not Authorized"
response.end
% > 9.如何传递变量从一页到另一页
答:用 HIDDEN 类型来传递变量
< % form method="post" action="mynextpage.asp" >
< % for each item in request.form % >
< input namee="< %=item% >" type="HIDDEN"
value="< %=server.HTMLEncode(Request.form(item)) % >" >
< % next % >
< /form > 10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限
答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 (:) 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框,as follows:
< % yourVar="测试对话框"% >
< % script language='javascript' >
alert("< %=yourvar% >")
< /script > 11.有没有办法保护自己的源代码,不给人看到
答:可以去下载一个微软的Windows Script Encoder,它可以对asp的脚本和客户端javascript/vbscript脚本进行加密。。。不过客户端加密后,只有ie5才能执行,服务器端脚本加密后,只有服务器上安装有script engine 5(装一个ie5就有了)才能执行。 12.怎样才能将 query string 从一个 asp 文件传送到另一个?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING")) 13.global.asa文件总是不起作用?
答:只有web目录设置为web application, global.asa才有效,并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码? 14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码?
答:Internet Sevices Manager - > 选择default web site - >右鼠键- >菜单属性-〉主目录- > 应用程序设置(Application Setting)- > 点击按钮 "配置"- > app mapping - >点击按钮"Add" - > executable browse选择 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.DELETE 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理,效率将降低。 15.如何注册组件
答:有两种方法。
第一种方法:手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行,进入到包含有DLL的目录,并输入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了,但是这个方法有一个缺陷。当使用这种方法注册完毕组件后,该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表,所以,这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下,要取消注册这个dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll 第二种方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件,大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下:
1) 打开IIS管理控制台。
2) 展开transaction server,右键单击"pkgs installed"然后选择"new package"。
3) 单击"create an empty package"。
4) 给该包命名。
5) 指定administrator帐号或则使用"interactive"(如果服务器经常是使用administrator 登陆的话)。
6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"。
7) 选择 "install new component" 。
8) 找到你的.dll文件然后选择next到完成。
要删除这个对象,只要选择它的图标,然后选择delete。
附注:特别要注意第二种方法,它是用来调试自己编写组件的最好方法,而不必每次都需要重新启动机器了。 16. ASP与Access数据库连接: <%@ language=VBscript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("数据库名称.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile %> 17. ASP与SQL数据库连接: <%@ language=VBscript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
%> 建立记录集对象: set rs=server.createobject("adodb.recordset")
rs.open SQL语句,conn,3,2
18. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 in ('值1','值2','值3')" sql="select * from 数据表 where 字段名 between 值1 and 值2" (2) 更新数据记录: sql="update 数据表 set 字段名=字段值 where 条件表达式" sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式" (3) 删除数据记录: sql="delete from 数据表 where 条件表达式" sql="delete from 数据表" (将数据表所有记录删除) (4) 添加数据记录: sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)" sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql) 用 rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) 例:CREATE TABLE tab01(name varchar(50),datetime default now()) DROP TABLE 数据表名称 (永久性删除一个数据表) 19. 记录集对象的方法: rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录 --------------------------------------- 20 Recordset对象方法 Open方法 recordset.Open Source,ActiveConnection,CursorType,LockType,Options Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。 ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常数 常数值 说明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。
adOpenKeyset 1 启动一个Keyset类型的游标。
adOpenDynamic 2 启动一个Dynamic类型的游标。
adOpenStatic 3 启动一个Static类型的游标。
-------------------------------------------------------------
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 -------------------------------------------------------------
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
AbsolutePage 不支持 不支持 可读写 可读写
AbsolutePosition 不支持 不支持 可读写 可读写
ActiveConnection 可读写 可读写 可读写 可读写
BOF 只读 只读 只读 只读
Bookmark 不支持 不支持 可读写 可读写
CacheSize 可读写 可读写 可读写 可读写
CursorLocation 可读写 可读写 可读写 可读写
CursorType 可读写 可读写 可读写 可读写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 可读写 可读写 可读写 可读写
LockType 可读写 可读写 可读写 可读写
MarshalOptions 可读写 可读写 可读写 可读写
MaxRecords 可读写 可读写 可读写 可读写
PageCount 不支持 不支持 只读 只读
PageSize 可读写 可读写 可读写 可读写
RecordCount 不支持 不支持 只读 只读
Source 可读写 可读写 可读写 可读写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读
AddNew 支持 支持 支持 支持
CancelBatch 支持 支持 支持 支持
CancelUpdate 支持 支持 支持 支持
Clone 不支持 不支持
Close 支持 支持 支持 支持
Delete 支持 支持 支持 支持
GetRows 支持 支持 支持 支持
Move 不支持 支持 支持 支持
MoveFirst 支持 支持 支持 支持
MoveLast 不支持 支持 支持 支持
MoveNext 支持 支持 支持 支持
MovePrevious 不支持 支持 支持 支持
NextRecordset 支持 支持 支持 支持
Open 支持 支持 支持 支持
Requery 支持 支持 支持 支持
Resync 不支持 不支持 支持 支持
Supports 支持 支持 支持 支持
Update 支持 支持 支持 支持
UpdateBatch 支持 支持 支持 支持
--------------------------------------------------------------
其中NextRecordset方法并不适用于Microsoft Access数据库。 LockType
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下: -------------------------------------------------------------
常数 常数值 说明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、
删、改的操作。
 
■今日推荐:用ASP与ADO查询Web数据库 
 
 
 
显示页面加载时间
重复域中的斑马线
显示字符串前20个字符并在结尾处添加“……”
如果动态图片为空,使用默认图片代替
如果数据为空,使用默认提示信息代替
●显示页面加载时间 页面顶部添加下面的代码: <%
Dim strStartTime
Dim strEndTime strStartTime = Timer '开始时间
%> 页面(同一页)的末尾添加: <%
' 加载完毕的时间
strEndTime = Timer Response.Write ("页面加载时间: ") Response.Write FormatNumber(strEndTime - strStartTime, 4)
Response.Write (" 秒.")
%>  ●重复域中的斑马线 <%
'此模块放置在重复域之外
Dim RecordCounter
Recordcounter = 0
%> <%
'将重复域中第一个 标签的CLASS属性代码用本模块替换
'本模块基于CSS来改变单元格背景色,你也可以直接设置背景色来实现斑马线
RecordCounter = Recordcounter + 1
If RecordCounter Mod 2 = 1 Then
Response.Write "altRow1"
Else
Response.write "altRow2"
End If
%>  ●显示字符串前20个字符并在结尾处添加“……” <%
Dim CutShort
CutShort = rsYourRecordset.Fields.Item("YourField").Value
Response.Write LEFT (CutShort, 20) & "........"
%>  ●如果动态图片为空,用默认图片代替 <%
Dim PicShow
PicShow = rsShowHide.Fields.Item("shMainPix").Value
IF PicShow <>"" THEN %>
">
<% ELSE %>

<% End If %>  ●如果数据为空,用默认提示信息代替。 <%
Dim strShowHide
strShowHide = rsYourRecordset.Fields.Item("YourDataField").Value
IF stShowHide <>"" THEN%>
数据为空
<%END IF%>
纯编码实现Access数据库的建立或压缩 <%
'#######以下是一个类文件,下面的注解是调用类的方法################################################
'# 注意:如果系统不支持建立Scripting.FileSystemObject对象,那么数据库压缩功能将无法使用
'# Access 数据库类
'# CreateDbFile 建立一个Access 数据库文件
'# CompactDatabase 压缩一个Access 数据库文件
'# 建立对象方法:
'# Set a = New DatabaseTools
'# by (萧寒雪) s.f.
'######################################################################################### Class DatabaseTools Public function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)
'建立数据库文件
'If DbVer is 0 Then Create Access97 dbFile
'If DbVer is 1 Then Create Access2000 dbFile
On error resume Next
If Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\"
If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))
If DbExists(SavePath & dbFileName) Then
Response.Write ("对不起,该数据库已经存在!")
CreateDBfile = False
Else
Dim Ca
Set Ca = Server.CreateObject("ADOX.Catalog")
If Err.number<>0 Then
Response.Write ("无法建立,请检查错误信息
" & Err.number & "
" & Err.Description)
Err.Clear
Exit function
End If
If DbVer=0 Then
call Ca.Create("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName)
Else
call Ca.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName)
End If
Set Ca = Nothing
CreateDBfile = True
End If
End function Public function CompactDatabase(byVal dbFileName,byVal DbVer,byVal SavePath)
'压缩数据库文件
'0 为access 97
'1 为access 2000
On Error resume next
If Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\"
If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))
If DbExists(SavePath & dbFileName) Then
Response.Write ("对不起,该数据库已经存在!")
CompactDatabase = False
Else
Dim Cd
Set Cd =Server.CreateObject("JRO.JetEngine")
If Err.number<>0 Then
Response.Write ("无法压缩,请检查错误信息
" & Err.number & "
" & Err.Description)
Err.Clear
Exit function
End If
If DbVer=0 Then
call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.3.51;Data
Source=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True")
Else
call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True")
End If
'删除旧的数据库文件
call DeleteFile(SavePath & dbFileName)
'将压缩后的数据库文件还原
call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName)
Set Cd = False
CompactDatabase = True
End If
end function Public function DbExists(byVal dbPath)
'查找数据库文件是否存在
On Error resume Next
Dim c
Set c = Server.CreateObject("ADODB.Connection")
c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
If Err.number<>0 Then
Err.Clear
DbExists = false
else
DbExists = True
End If
set c = nothing
End function Public function AppPath()
'取当前真实路径
AppPath = Server.MapPath("./")
End function Public function AppName()
'取当前程序名称
AppName = Mid(Request.ServerVariables("SCRIPT_NAME"),(InStrRev(Request.ServerVariables("SCRIPT_NAME") ,"/",-1,1))+1,Len(Request.ServerVariables("SCRIPT_NAME")))
End Function Public function DeleteFile(filespec)
'删除一个文件
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("删除文件发生错误!请查看错误信息
" & Err.number & "
" & Err.Description)
Err.Clear
DeleteFile = False
End If
call fso.DeleteFile(filespec)
Set fso = Nothing
DeleteFile = True
End function Public function RenameFile(filespec1,filespec2)
'修改一个文件
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("修改文件名时发生错误!请查看错误信息
" & Err.number & "
" & Err.Description)
Err.Clear
RenameFile = False
End If
call fso.CopyFile(filespec1,filespec2,True)
call fso.DeleteFile(filespec1)
Set fso = Nothing
RenameFile = True
End function End Class
%> 现在已可以压缩有密码的数据库,代码如下,但是压缩之后的数据库密码就没有了!如何解决? <%
Const JET_3X = 4 Function CompactDB(dbPath, boolIs97)
Dim fso, Engine, strDBPath
strDBPath = left(dbPath,instrrev(DBPath,"\"))
Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(dbPath) Then
Set Engine = CreateObject("JRO.JetEngine") If boolIs97 = "True" Then
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _
"Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & strDBPath & "temp.mdb;" _
& "Jet OLEDB:Engine Type=" & JET_3X
Else
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & dbpath, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb"
End If fso.CopyFile strDBPath & "temp.mdb",dbpath
fso.DeleteFile(strDBPath & "temp.mdb")
Set fso = nothing
Set Engine = nothing CompactDB = "你的数据库, " & dbpath & ", 已经压缩成功!" & vbCrLf Else
CompactDB = "数据库名称或路径不正确. 请重试!" & vbCrLf
End If End Function
%>
asp编程有用的例子(一)
1.如何用Asp判断你的网站的虚拟物理路径
答:使用Mappath方法
< p align="center" >< font size="4" face="Arial" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color="#FF0000" size="6" face="Arial" >
< %= Server.MapPath("\")% >
< /font >< /p >
2.我如何知道使用者所用的浏览器?
答:使用the Request object方法
strBrowser=Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strBrowser,"MSIE") < > 0 Then
  Response.redirect("ForMSIEOnly.htm")
Else
  Response.redirect("ForAll.htm")
End If 3.如何计算每天的平均反复访问人数
答:解决方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
显示结果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998 4.如何显示随机图象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
显示
< img src="< %=dpic% >" > 5.如何回到先前的页面
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用图片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" > 6.如何确定对方的IP地址
答:< %=Request.serverVariables("REMOTE_ADDR)% > 7.如何链结到一副图片上
答:< % @Languages=vbs cript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% > 8.强迫输入密码对话框
答:把这句话放载页面的开头
< % response.status="401 not Authorized"
response.end
% > 9.如何传递变量从一页到另一页
答:用 HIDDEN 类型来传递变量
< % form method="post" action="mynextpage.asp" >
< % for each item in request.form % >
< input namee="< %=item% >" type="HIDDEN"
value="< %=server.HTMLEncode(Request.form(item)) % >" >
< % next % >
< /form > 10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限
答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 ( 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框,as follows:
< % yourVar="测试对话框"% >
< % s cript language='javas cript' >
alert("< %=yourvar% >")
< /s cript > 11.有没有办法保护自己的源代码,不给人看到
答:可以去下载一个微软的Windows s cript Encoder,它可以对asp的脚本和客户端javas cript/vbs cript脚本进行加密。。。不过客户端加密后,只有ie5才能执行,服务器端脚本加密后,只有服务器上安装有s cript engine 5(装一个ie5就有了)才能执行。 12.怎样才能将 query string 从一个 asp 文件传送到另一个?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING")) 13.global.asa文件总是不起作用?
答:只有web目录设置为web application, global.asa才有效,并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码? 14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码?
答:Internet Sevices Manager - > 选择default web site - >右鼠键- >菜单属性->主目录- > 应用程序设置(Application Setting)- > 点击按钮 "配置"- > app mapping - >点击按钮"Add" - > executable browse选择 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.DELETE 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理,效率将降低。 15.如何注册组件
答:有两种方法。
第一种方法:手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行,进入到包含有DLL的目录,并输入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了,但是这个方法有一个缺陷。当使用这种方法注册完毕组件后,该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表,所以,这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下,要取消注册这个dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll 第二种方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件,大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下:
1) 打开IIS管理控制台。
2) 展开transaction server,右键单击"pkgs installed"然后选择"new package"。
3) 单击"create an empty package"。
4) 给该包命名。
5) 指定administrator帐号或则使用"interactive"(如果服务器经常是使用administrator 登陆的话)。
6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"。
7) 选择 "install new component" 。
8) 找到你的.dll文件然后选择next到完成。
要删除这个对象,只要选择它的图标,然后选择delete。
附注:特别要注意第二种方法,它是用来调试自己编写组件的最好方法,而不必每次都需要重新启动机器了。 16. ASP与Access数据库连接: <%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("数据库名称.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile %>
接着来,希望大家也参与近来
-------------------------------
asp编程有用的例子(二)
17. ASP与SQL数据库连接: <%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
%> 建立记录集对象: set rs=server.createobject("adodb.recordset")
rs.open SQL语句,conn,3,2 18. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 in ('值1','值2','值3')" sql="select * from 数据表 where 字段名 between 值1 and 值2" (2) 更新数据记录: sql="update 数据表 set 字段名=字段值 where 条件表达式" sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式" (3) 删除数据记录: sql="delete from 数据表 where 条件表达式" sql="delete from 数据表" (将数据表所有记录删除) (4) 添加数据记录: sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)" sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值
COUNT(*字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql) 用 rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) 例:CREATE TABLE tab01(name varchar(50),datetime default now()) DROP TABLE 数据表名称 (永久性删除一个数据表) 19. 记录集对象的方法: rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录 --------------------------------------- 20 Recordset对象方法 Open方法 recordset.Open Source,ActiveConnection,CursorType,LockType,Options Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。 ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常数 常数值 说明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。
adOpenKeyset 1 启动一个Keyset类型的游标。
adOpenDynamic 2 启动一个Dynamic类型的游标。
adOpenStatic 3 启动一个Static类型的游标。
-------------------------------------------------------------
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 -------------------------------------------------------------
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
AbsolutePage 不支持 不支持 可读写 可读写
AbsolutePosition 不支持 不支持 可读写 可读写
ActiveConnection 可读写 可读写 可读写 可读写
BOF 只读 只读 只读 只读
Bookmark 不支持 不支持 可读写 可读写
CacheSize 可读写 可读写 可读写 可读写
CursorLocation 可读写 可读写 可读写 可读写
CursorType 可读写 可读写 可读写 可读写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 可读写 可读写 可读写 可读写
LockType 可读写 可读写 可读写 可读写
MarshalOptions 可读写 可读写 可读写 可读写
MaxRecords 可读写 可读写 可读写 可读写
PageCount 不支持 不支持 只读 只读
PageSize 可读写 可读写 可读写 可读写
RecordCount 不支持 不支持 只读 只读
Source 可读写 可读写 可读写 可读写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读
AddNew 支持 支持 支持 支持
CancelBatch 支持 支持 支持 支持
CancelUpdate 支持 支持 支持 支持
Clone 不支持 不支持
Close 支持 支持 支持 支持
Delete 支持 支持 支持 支持
GetRows 支持 支持 支持 支持
Move 不支持 支持 支持 支持
MoveFirst 支持 支持 支持 支持
MoveLast 不支持 支持 支持 支持
MoveNext 支持 支持 支持 支持
MovePrevious 不支持 支持 支持 支持
NextRecordset 支持 支持 支持 支持
Open 支持 支持 支持 支持
Requery 支持 支持 支持 支持
Resync 不支持 不支持 支持 支持
Supports 支持 支持 支持 支持
Update 支持 支持 支持 支持
UpdateBatch 支持 支持 支持 支持
--------------------------------------------------------------
其中NextRecordset方法并不适用于Microsoft Access数据库。 LockType
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下: -------------------------------------------------------------
常数 常数值 说明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、
删、改的操作。
将你的网站设置为客户的信任站点--WSH方案 ar SiteName="Acmnet"
SetTrustSite(SiteName);
WScript.Echo("You have accept 'http://acmnet/' as your Trusted Site");
function SetTrustSite(StrSiteName)
{
var WshShell=WScript.CreateObject("WScript.Shell");
WshShell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Domains\\"+StrSiteName+"\\http", 2 ,"REG_DWORD");
TrustedSite_Value=WshShell.RegRead("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Domains\\"+StrSiteName+"\\http");
delete WshShell;
}
如何在服务器端调用winzip命令行对上传的多个文件打包压缩
-------------------------------------------
如何在服务器端调用winzip命令行对上传的多个文件打包压缩? 要解决这个问题,首先要了解一下Windows Scripting Host,简称为WSH!下面引用一下微软给的解释:
************************************************************************
* WSH是微软脚本技术系列中的一种,简单讲,就是提供了一种脚本环境, *
* 在这个环境中,预定义了一些对象,同时也可以使用COM里的其他对象。 *
* 他使用一种脚本引擎来对脚本解释执行,微软自己支持VBSCRIPT和JSCRIPT, *
* 第三方也可以开发自己的脚本引擎。 *
************************************************************************
具体点,就是你先编好一些脚本文件(微软自带例子若干,后缀.vbs或 .js),
然后用一个程序对他解释执行,这个程序就叫Windows Scripting Host,程序
的名字是Wscript.exe(或者命令行的Cscript.exe),你可以查看一下你的机器
里有没有这两个文件,就知道有没有WSH了。(win2000是在winnt/system32/下)
这非常像批处理文件,只不过文件里不是命令行,而是脚本语言写的脚本。 再来简单介绍一下WSH自带的几个内置对象包括: 1.由 Wscript.exe 提供的对象
Wscript 作为 Wscript 公开给脚本引擎。
WshArguments 未公开;通过 Wscript.Arguments 属性访问。 入 2.由 WSHom.Ocx 提供的对象。
WshShell 自动对象。ProgID 是 Wscript.WshShell。
(注:这个就是我们要用到的,可以执行dos命令)
WshNetwork 自动对象。ProgID 是 Wscript.WshNetwork。
WshShortcut 未公开;通过 WshShell.CreateShortcut 方法访问。
WshUrlShortcut 未公开;通过 WshShell.CreateShortcut 方法访问。
WshCollection 未公开;通过 WshNetwork.EnumNetworkDrives 或 WshNetwork.EnumPrinterConnection 方法访问。
WshEnvironment 未公开;通过 WshShell.Environment 属性访问。
WshSpecialFolders 未公开;通过 WshShell.Folder 属性访问。 他们主要可以完成环境变量的获取,网络登陆,驱动器映射,快截方式创建,
程序加载,特殊文件夹(如系统文件夹)信息获取等功能。 如果你的系统里支持ADO等COM部件,你同样可以使用,
下面这个例子演示打开写字板查看文本文件,同时创建一个文本文件并写入一
段话,你可以把他拷贝到写字板中,然后以.vbs为后缀存盘,之后双击他, 'test.vbs
'*********************
'下面用SHELL对象启动程序
'*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad " & Wscript.ScriptFullName)
'***********************************************
'用COM对象Scripting.FileSystemObject操作文本文件
'***********************************************
Set fs = Wscript.CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("这是一个测试。")
a.Close 也可以在asp等web编程语言中应用

注:
1.其中runat=server必须要有
2.Set WshShell = Wscript.CreateObject("Wscript.Shell")
要改为Set WshShell = server.CreateObject("Wscript.Shell"),
3.参数1代表SW_SHOWNORMAL, 激活并显示一个窗口。若窗口是最小化或最大化,则恢复到其原来的大小和位置。
4.TRUE代表返回执行的错误,False或者为指定代表脚本继续执行而不等待进程结束。
5.调用WSH的内置对象了,可以象调用函数和过程一样。
如call WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true) 如果你对WSH感兴趣,想了解更多的话,请察看
http://msdn.microsoft.com/library/default....onwshbasics.asp
http://www.dev-club.com/club/bbs/showEssence.asp?id=11136 现在我们言归正传来看看如何对文件进行压缩和解压!
大家都知道winzip对文件解压和压缩都易如反掌,但是如何通过程序和命令行对其调用呢?
当然winzip的作者已经开发出
WinZip Command Line Support Add-On Version 1.0
大家去可以去http://www.winzip.com/wzcline.htm 下载wzcline.exe!
前提是本机须安装winzip8.0或更高版本的支持,如果你不是winzip8.0,去
http://www.winzip.com/download.htm 下载! 下载后,直接安装就可以!
就会在winzip的目录中产生winzip命令行帮助文件和程序WZZIP.exe,WZUNZIP.EXE。
你可以开始运行里调用:
如:"c:\program files\winzip\wzzip" myfile.zip
也可以拷贝这里两个文件到任意目录下,直接在dos窗口下运行
如:wzzip.exe myfile.zip
你可以在系统的环境变量里加入set path=c:\windows;c:\program files\winzip;
就可以在任何地方不用加入路经调用了! 现在来简单的了解一下帮助中两个命令的基本用法
压缩文件用 WZZIP.exe :
通用格式:wzzip [options] zipfile [@listfile] [files...]
[options]包括:
-a 默认的操作,压缩文件
-a+ 压缩文件,并删除要压缩的文件
-b[drivepath] 是在另外的驱动器上创建临时压缩文件
-d 删除zip文件中指定的目标文件
-e 是设置压缩比率,x最大,0最小
-f 替换zip文件中存在的文件
-h-? 察看帮助
-v 创建一个压缩文件的列表信息
-@list 先创建一个包含所有要解压的文件的文件,然后按所包含的的文件名压缩
...............(其他具体看帮助文件)
[@listfile] 是压缩文件的列表信息纪录
[files...] 则是要压缩的多个文件,用空格隔开,也可以用通配符 例:
压缩当前目录的所有文件
wzzip test.zip *.*
压缩类型为txt的所有文件
wzzip test.zip *.txt
压缩两个文件
wzzip test.zip abc.txt def.txt
压缩类型为txt的所有文件除了abc.txt
wzzip -xABC.TXT test.zip *.txt
压缩D:\docs下的所有类型为txt的文件及子目录
wzzip -rp test.zip d:\docs\*.txt
把zipit.1st里的文件更新到test.zip
wzzip -u test.zip @Zipit.lst
列出一个压缩文件的列表内容
wzzip -v test.zip
解压文件用WZUNZIP.exe :
通过格式:wzunzip [options] zipfile [@listfile] [path] [files...]
[options]包括:
-c[m] 解压是显示文件列表在dos屏幕中
-d 重建zip文件中的目录结构
-f 只解压在zip文件里同目前文件夹存在的同名的文件,如果没有则不解压
-jhrs 忽视zip文件里的文件的隐藏、只读、系统属性
-Jhrs 只解压带有隐藏、只读、系统属性的文件
-n 只解压叫新的文件,如果要解压的文件比已存在的新则替换。
-o 不用通过yes来确定是否要替换文件
-v 创建一个压缩文件的列表信息
-@list 先创建一个包含所有要解压的文件的文件,然后按所包含的的文件名解压
...............(其他具体看帮助文件)
例如:
创建所有文件到当前目录下
wzunzip test.zip
从test.zip中创建abc.txt到当前目录下
wzunzip test.zip abc.txt
创建在test.zip中的目录结构及文件到当前目录下
wzunzip -d test.zip
创建在test.zip中的目录结构及文件到c:\docs下
wzunzip -d test.zip c:\docs从test.zip中创建包含在files.ist中的文件名的文件
wzunzip test.zip @files.lst
显示test.zip的文件列表内容
wzunzip -v test.zip
显示压缩文件中所有类型为txt的文件列表内容
wzunzip -v test.zip *.txt
有了以上的准备,那么我们现在来编写VBS来执行文件解压和压缩就易如反掌了:
'test.vbs
'*********************
'上面用SHELL对象启动程序
'*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt")
'test.asp
'*********************
'上面用SHELL对象启动程序
'*********************

利用ASP远程注册DLL的方法
--------------------------
<% Response.Buffer = True %>
<% Server.ScriptTimeout = 500
Dim frmFolderPath, frmFilePath frmFolderPath = Request.Form("frmFolderPath")
frmFilePath = Request.Form("frmDllPath")
frmMethod = Request.Form("frmMethod")
btnREG = Request.Form("btnREG")
%>

Regsvr32.asp









Regsvr Functions
Insert Path to DLL Directory





<%
IF Request.Form("btnFileList") <> "" OR btnREG <> "" Then
Set RegisterFiles = New clsRegister
RegisterFiles.EchoB("Select File")
Call RegisterFiles.init(frmFolderPath)
RegisterFiles.EchoB("
")
IF Request.Form("btnREG") <> "" Then
Call RegisterFiles.Register(frmFilePath, frmMethod)
End IF
Set RegisterFiles = Nothing
End IF
%>





<%
Class clsRegister Private m_oFS Public Property Let oFS(objOFS)
m_oFS = objOFS
End Property Public Property Get oFS()
Set oFS = Server.CreateObject("Scripting.FileSystemObject")
End Property
Sub init(strRoot) 'Root to Search (c:, d:, e:)
Dim oDrive, oRootDir
IF oFS.FolderExists(strRoot) Then
IF Len(strRoot) < 3 Then 'Must Be a Drive
Set oDrive = oFS.GetDrive(strRoot)
Set oRootDir = oDrive.RootFolder
Else
Set oRootDir = oFS.GetFolder(strRoot)
End IF
Else
EchoB("Folder ( " & strRoot & " ) Not Found.")
Exit Sub
End IF
setRoot = oRootDir Echo("")
BuildOptions
End Sub Sub getAllDlls(oParentFolder)
Dim oSubFolders, oFile, oFiles
Set oSubFolders = oParentFolder.SubFolders
Set opFiles = oParentFolder.Files For Each oFile in opFiles
IF Right(lCase(oFile.Name), 4) = ".dll" OR Right(lCase(oFile.Name), 4) = ".ocx" Then
Echo("")
End IF
Next On Error Resume Next
For Each oFolder In oSubFolders 'Iterate All Folders in Drive
Set oFiles = oFolder.Files
For Each oFile in oFiles
IF Right(lCase(oFile.Name), 4) = ".dll" OR Right(lCase(oFile.Name), 4) = ".ocx" Then
Echo("")
End IF
Next
Call getAllDlls(oFolder)
Next
On Error GoTo 0
End Sub Sub Register(strFilePath, regMethod)
Dim theFile, strFile, oShell, exitcode
Set theFile = oFS.GetFile(strFilePath)
strFile = theFile.Path Set oShell = CreateObject ("WScript.Shell") IF regMethod = "REG" Then 'Register
oShell.Run "c:\WINNT\system32\regsvr32.exe /s " & strFile, 0, False
exitcode = oShell.Run("c:\WINNT\system32\regsvr32.exe /s " & strFile, 0, False)
EchoB("regsvr32.exe exitcode = " & exitcode)
Else 'unRegister
oShell.Run "c:\WINNT\system32\regsvr32.exe /u/s " & strFile, 0, False
exitcode = oShell.Run("c:\WINNT\system32\regsvr32.exe /u/s " & strFile, 0, False)
EchoB("regsvr32.exe exitcode = " & exitcode)
End IF Cleanup oShell
End Sub Sub BuildOptions
EchoB("Register: ")
EchoB("unRegister: ")
End Sub Function Echo(str)
Echo = Response.Write(str & vbCrLf)
End Function Function EchoB(str)
EchoB = Response.Write(str & "
" & vbCrLf)
End Function Sub Cleanup(obj)
If isObject(obj) Then
Set obj = Nothing
End IF
End Sub Sub Class_Terminate()
Cleanup oFS
End Sub
End Class
%>
详细出处参考:http://www.jb51.net/article/5631.htm
 
1、避免使用DSN连接数据库
是否仍旧在使用ODBC系统或文件DSN连接数据库?请用OLEDB提供者代替它,这是一种速度更快而且不需要使用DSN的数据库连接技术。使用OLEDB提供者,你不必再为了创建系统DSN恳求ISP(或数据库管理员/网站管理员),也不必为了网站文件位置的变化而修改配置。 问:
   我看到过大量通过数据资源名字(DSN)连接数据库的例子,不过我现在想不通过DSN连接数据库。在ASP中可以实现这一点吗?能否举几个具体的例子说明?我希望新的连接方法不依赖于系统DSN,但又可以在数据库连接串中指定驱动程序、服务器名字、数据库、数据库账号和密码。    答:    如果你使用的是SQL Server 7,请使用下面的数据库连接串:
  
strConnString = "DSN='';DRIVER={SQL SERVER};" & _
"UID=myuid;PWD=mypwd;" & _
"DATABASE=MyDb;SERVER=MyServer;"  
   其中最重要的参数在于“DRIVER=”部分。如果你希望绕过ODBC,直接通过OLEDB访问SQL Server(一般来讲这种方法速度更快),请使用下面这种连接串:   
strConnString ="Provider=SQLOLEDB.1;Password=mypassword;" & _
"Persist Security Info=True;User ID=myuid;" & _
"Initial Catalog=mydbname;" & _
"Data Source=myserver;Connect Timeout=15"  
   如果你要使用数据库连接串,但又不熟悉OLEDB提供者的连接串语法,请使用Visual Basic的数据环境设计器或ADO数据控件创建一个,然后把它拷贝出来用于ADO连接对象就可以了。在立即窗口中,输入命令? dataenvironment1.connection1.ConnectionString可以得到连接串的代码。请注意Microsoft Access连接串的语法有所不同,参见《Syntax for DSN-Less Connection for MS Access》    参见:《ASP性能优化指南》中的数据库连接部分。 2、记录集中记录总数的计算
1062
   刚开始在ASP页面中使用记录集的时候可能经常会遇到这个问题。如果你想访问记录集中的数据,首先必须保证记录集中确实包含数据。请记住,如果记录集中没有数据,系统将显示非常不友好的运行时错误信息。你可以使用下面的代码去解决这种问题。    问:    我已经有数年的VB经验,但刚刚开始学习ASP和VBScript。现在我要打开一个Access数据库,计算其中的记录总数并在Web页面中显示这些信息。数据库的名字叫sean.mdb,其中包含一个people表,表中有三个记录。然而,当我运行脚本时它总是说有-1个记录。    是否可以告诉我下面的代码什么地方出错了?   
< % Set objConn = Server.CreateObject("ADODB.Connection")
Set objRst = Server.CreateObject("ADODB.Recordset")objConn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=
" & Server.Mappath("seannewelldbsean.mdb"))strSQL = "SELECT * FROM people"objRst.Open strSQL, objConn Response.write( "< P >" & strSQL & "< /P >" )
Response.write("< H2 >There are " & objRst.RecordCount &
" People in the database< /H2 >")If objRst.RecordCount > 0 Then
  objRst.MoveFirst
  Do While Not objRst.EOF
   Response.write( "Name = " & objRst.fields(0) )
   objRst.MoveNext
  Loop
else
  Response.write( "It's EMPTY!" )
End IfobjRst.Close
Set objRst = Nothing
objConn.Close
Set objConn = Nothing
% > 
   答:    在低版本的MDAC中RecordCount属性返回-1。请在你的服务器上把MDAC文件更新到最新的版本,最新的MDAC文件可以在www.microsoft.com/data找到。    如果Web服务器由ISP管理而你又无权配置它,无法升级MDAC文件,那么必须修改代码。    原来使用下面的代码检查记录集中是否有记录:   
If objRst.RecordCount > 0 Then ...   请改用下面的代码:   
  If objRst.BOF and objRst.EOF Then
   ' 记录集为空
  Else
   Do While not objRst.EOF
     ' 处理记录集
     objRst.MoveNext
   Loop
  End If 
   2000年06月30日更新,新西兰的Daryl Egarr说:    可以看出,读者提问中的代码并没有错误。问题在于“在低版本的MDAC中RecordCount属性返回-1”,这一判断本身并没有错误,然而从提问内容来看作者不应该作出这种假定,因为原问题中没有任何一行代码意味着使用了低版本的MDAC。    作者考虑问题的方向不对,问题的要点在于并非所有的游标类型都支持所有的属性和方法(不管采用哪种数据库系统)。问题中代码出现错误的真正原因在于使用默认的CursorLocation时:   
Recordset.CursorLocation = adUseServer   RecordCount属性只有在记录集的CursorType为1或者3(即adOpenKeyset,adOpenStatic)时才是可用的。出现错误的代码没有指定CursorType,也就是使用了0类型的游标(即adOpenForwardOnly,这是速度最快的游标类型),此时对RecordCount的引用将一直返回0。    解决问题的方法很简单,只要把原来代码中的:   
objRst.Open strSQL, objConn    改成:   
objRst.Open strSQL, objConn ,1 3、数据库搜索技巧
在数据库搜索中,如果我们只使用等于符号搜索“Pro”是无法提取出那些能够匹配“ASP Pro”的记录的。下面我们要介绍的是如何使用SQL的LIKE操作符实现部分文本搜索。
问:
从数据库提取记录集时,是否有可能提取那些包含比我所指定的文本更多内容的记录,且不对搜索文本的出现位置有具体要求?
例如:   
StrName = 'Direct'
RSShops = Server.CreateObject("ADODB.Recordset")
strSql = "SELECT * FROM Shops WHERE Name =
    '" & StrName & "' 
   是否可以提取出商店名字中包含“direct”单词的记录集?    答:    不要在SQL命令中使用等于(“=”)操作符,而是改用LIKE操作符。    要提取出那些名字中包含“direct”的记录,可以使用下面这个查询命令:   
SELECT * FROM Shops WHERE Name LIKE '%direct%' 
   请按照这里的代码修改实际使用的查询。 4、数值显示格式化
对于VB程序员来说,ASP中一个非常令人失望的改动是VBScript中不再有Format函数。那么,如何格式化数字使得它不再以默认的格式显示?比如,将数字显示为百分数、货币金额或者加上小数占位符。下面的代码帮你解决这个问题,告诉你如何通过用来取代VB Format的FormatXXXX函数来格式化输出。    问:    在我开发的应用中,某个页面要显示一些####.####格式的数字。在ASP中如何才能实现?    答:    使用VBScript的FormatNumber函数,该函数能够返回格式化的数字表达式。语法如下:
FormatNumber(Expression [,NumDigitsAfterDecimal ][,IncludeLeadingDigit
][,UseParensForNegativeNumbers ][,GroupDigits]]]]) 
   例如,FormatNumber("123.45",4)将返回123.4500。    请参考http://msdn.microsoft.com/scripting的VBScript帮助获得更多信息。
5、SQL命令中的引号处理
虽然用VBScript代码构造的SQL命令本身没有问题,但是由于用户输入的表单数据中包含了单引号或双引号,本来合法的SQL语句不再合法。相信有不少读者已经遇到过这个问题。下面我们要介绍的就是如何解决这类问题。    问:    我有一个关于SQL Server更新、插入记录命令的问题。我想用带有一个或多个引号的字符串来更新数据库,SQL将字符串中的引号看成语法符号并提示错误。我应该怎么办呢?是否有其它的字符串分隔符?我已经试过双引号、[]、{}等,但都没有用。    答:    在执行SQL命令之前,应当把所有字符数据中的单引号用两个单引号替代。    也就是说,如果SQL命令中出现了带引号的字符串(比如用户的名字为O'Brian),就会出现问题:   
Update Table Set NameField = 'O'Brian'   要解决问题,必须把字符串中的单引号转换成两个单引号:   
Update Table Set NameField = 'O''Brian'    可以利用Replace函数实现这种转换:   
strName = Replace(strName, "'" , "''" ) 6、处理数据库日期值
  如果说包含引号的字符串会带来问题的话,那么对我们的某些读者来说向数据库传递日期数据更是容易出错。下面我们根据所用数据库系统的类型分别解释如何正确地完成这一任务。
问:如何使用ASP向数据库传递日期数据?
答:答案与所用数据库类型有关。假设我们使用名为“strDate”的变量保存日期数据,如果使用Access数据库,那么生成字符串的代码为:
strSQL = " 合法的SQL命令 " & "#" & strDate & "#" 
   如果使用的是SQL Server、Sybase、Oracle等数据库,则代码为:
strSQL = "合法的SQL命令" & "'" & strDate & "'" 
   注意两者的区别在于发送日期数据所用的分隔符。Access使用“#”,而其他数据库使用的是单引号“'”。 7、检查Cookie是否启用
用户已经禁用Cookie?看来,这个用户不那么信任你。不过,既然他这么乐意搞小动作,你也不妨来一下。使用下面介绍的方法,你可以检查用户是否已经禁用了Cookie,然后礼貌地告诉他如果要使用网站的全部功能,那么他必须启用Cookie。    问:    如何才能知道用户是否关闭了Cookie?    答:    要检查用户是否已经关闭了Cookie,可按如下步骤进行: 设置一个Cookie。
重定向页面。
在重定向页面中读取Cookie。
如果存在Cookie,则用户已经启用了Cookie;否则,说明用户禁用了Cookie。
通过查询字符串确定当前位于步骤1还是3。
   代码实例如下:   
  Dim strCookie, strTry
  strCookie = Request.Cookies("MyCookie")
  strTry = Request.QueryString("Try")
 
  If strCookie = "" Then
   ' Check to see if this is a redirect
   ' after setting the cookie
   If strTry = "" Then  
     Response.Cookies("MyCookie") = "Set"
     ' Redirect to this page and try again.
     Response.Redirect(Request.ServerVariables("SCRIPT_NAME")& "?Try=Yes")
   Else
     ' User/Browser didn't accept cookies
     ' Do something...   
   End If
  Else
   ' -- Hooray! User is accepting cookies
   ' -- Delete our cookie: by setting its
   ' -- expiry date to waaaay back
   Response.Cookies("MyCookie").Expires = "January 1, 1980"
     ' Do something...   
  End If8、检查文件是否存在
如果你通过ASP来管理文件,在处理某个文件之前必须确认一下该文件确实存在。下面介绍的简单代码可用于验证文件是否存在。    问:    我想访问某个数据库中的PDF文件,并在HTML页面中创建对这些文件的链接。在刷新链接之前,我想要验证文件是否确实存在。如何在ASP中实现验证功能?    答:    在ASP中可以使用FileSystemObject的FileExists方法验证文件是否存在。
Dim fs, strFileNameAndPathstrFileNameAndPath = Your file name
' -- Use file name and path
' -- from the database. Remember to map it
' -- to the Web Server's point of view.
' -- Use Server.MapPath for help.Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists(strFileNameAndPath) Then
  ' -- 文件存在
else
  ' -- 文件不存在
end if
9、如何更新被锁定的DLL
如果你正在使用Visual Basic COM组件,一定知道更新组件版本时候所出现的错误信息“不能更新DLL文件,访问禁止”,或许已经有好多次被它挡驾了。下面我们介绍的是一个小巧的批命令文件,你可以用它来自动启动或关闭锁定DLL文件的MTS。
问:
我们所用的IIS 4.0上运行着ASP和一个Visual Basic 6.0 DLL文件,DLL文件用来为ASP页面提供数据服务。问题是,当我们想要把Web服务器上的DLL升级到新的版本时,系统总是显示DLL文件正在使用中,既不能上载也不能注册这个新的DLL。我们试过关闭Web网站以及IIS,但DLL文件仍处于使用状态。唯一的办法似乎是关闭服务器。如你所知,网站运行时关闭服务器显然不太合适。你是否有解决这个问题的方法?有一个16位的工具软件WPS可以关闭DLL,然而,它不能用于VB6的DLL文件。    答:    不能更新DLL文件的原因在于Microsoft Transaction Server(MTS)已经打开了DLL的一个实例,必须使用mtxstop才能关闭它。首先,创建批命令文件FlushCache.bat,在文件中输入以下内容:
net stop iisadmin /y
mtxstop
net start w3svc   运行这个批命令文件。它将在大约5秒钟内关闭Web服务器并重新启动它。在关闭和启动两个操作之间它将清除MTS缓冲,然后你就可以更新DLL文件。    第一次运行批命令文件的时候,要注意一下其他被关闭的服务(例如FTP服务等)。写下这些被关闭的服务,然后打开批命令文件,加入代码使得这些服务也被重新启动:
net start < 服务的名字 >   2000年06月03日,Bill Bassett提出了另外一种方法:    有一种解决该问题的更为简单的方法,这就是配置应用使其运行在自己独立的内存空间中。运行IIS MMC,右击包含目标应用的分支,选择“属性”。在属性对话框中间的应用设置区,输入应用的名字并选中“在独立的内存空间运行”检查框。    应用运行的时候,只要再次打开其属性页面就可以看到此时“卸载”按钮已经变为可用了。点击这个按钮应用卸载,你可以更新DLL文件。该操作并不取消DLL的注册,所以这些工作要用regsvr32手工完成。这种方法要比关闭IIS等服务再重新启动它们要好。 10、记录文件下载日志
这是一个简单但很实用的技巧,用于监测有多少用户从网站下载了文件。    问:    我们需要监测用户在网站上的文件下载操作。当用户点击链接下载文件时,我们希望能够运行某个ASP文件将日志数据写入SQL Server数据库,然后执行下载操作。问题是,ASP页面如何才能在记录日志数据之后再将文件下载到客户端?    答:    窍门在于用超级链接启动第二个“后台”脚本,用它来记录下载日志并启动下载过程。只要第二个页面不产生任何HTML输出,用户浏览器将仍旧显示第一个页面。    下面是第一个文件中的链接示例:    Download code.zip (不要点击这个链接,它只用于演示,没有任何实际功能。)    以上链接由下面的代码创建:
< A HREF="dnladd.asp?filename=code.zip" >Download code.zip< /A >    用户点击链接时我们把待下载的文件名传递给了第二个文件dnladd.asp。Dnladd.asp包含了把下载文件名字和其他信息写入数据库的脚本。完成数据库操作后,dnladd.asp用如下代码启动下载过程:
Response.ContentType = "application/x-zip-compressed"
Response.Redirect request("filename")   注意:不要在dnladd.asp中输出任何HTML代码。