一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ASP數(shù)據(jù)庫(kù)連接方式大全

 高高興興 2006-01-20

‘#######以下是一個(gè)類文件,下面的注解是調(diào)用類的方法################################################
‘# 注意:如果系統(tǒng)不支持建立scripting.FileSystemObject對(duì)象,那么數(shù)據(jù)庫(kù)壓縮功能將無法使用
‘# Access 數(shù)據(jù)庫(kù)類
‘# CreateDbFile 建立一個(gè)Access 數(shù)據(jù)庫(kù)文件
‘# CompactDatabase 壓縮一個(gè)Access 數(shù)據(jù)庫(kù)文件
‘# 建立對(duì)象方法:
‘# Set a = New DatabaseTools
‘# by (蕭寒雪) s.f.
‘#########################################################################################

Class DatabaseTools

Public function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)
‘建立數(shù)據(jù)庫(kù)文件
‘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 ("對(duì)不起,該數(shù)據(jù)庫(kù)已經(jīng)存在!")
CreateDBfile = False
Else
Dim Ca
Set Ca = Server.CreateObject("ADOX.Catalog")
If Err.number<>0 Then
Response.Write ("無法建立,請(qǐng)檢查錯(cuò)誤信息
" & 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)
‘壓縮數(shù)據(jù)庫(kù)文件
‘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 ("對(duì)不起,該數(shù)據(jù)庫(kù)已經(jīng)存在!")
CompactDatabase = False
Else
Dim Cd
Set Cd =Server.CreateObject("JRO.JetEngine")
If Err.number<>0 Then
Response.Write ("無法壓縮,請(qǐng)檢查錯(cuò)誤信息
" & 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
‘刪除舊的數(shù)據(jù)庫(kù)文件
call DeleteFile(SavePath & dbFileName)
‘將壓縮后的數(shù)據(jù)庫(kù)文件還原
call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName)
Set Cd = False
CompactDatabase = True
End If
end function

Public function DbExists(byVal dbPath)
‘查找數(shù)據(jù)庫(kù)文件是否存在
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()
‘取當(dāng)前真實(shí)路徑
AppPath = Server.MapPath("./")
End function

Public function AppName()
‘取當(dāng)前程序名稱
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)
‘刪除一個(gè)文件
Dim fso
Set fso = CreateObject("scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("刪除文件發(fā)生錯(cuò)誤!請(qǐng)查看錯(cuò)誤信息
" & 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)
‘修改一個(gè)文件
Dim fso
Set fso = CreateObject("scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("修改文件名時(shí)發(fā)生錯(cuò)誤!請(qǐng)查看錯(cuò)誤信息
" & 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
%>


現(xiàn)在已可以壓縮有密碼的數(shù)據(jù)庫(kù),代碼如下,但是壓縮之后的數(shù)據(jù)庫(kù)密碼就沒有了!如何解決?

<%
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 = "你的數(shù)據(jù)庫(kù), " & dbpath & ", 已經(jīng)壓縮成功!" & vbCrLf

Else
CompactDB = "數(shù)據(jù)庫(kù)名稱或路徑不正確. 請(qǐng)重試!" & vbCrLf
End If

End Function
%>





asp編程有用的例子(一)
1.如何用Asp判斷你的網(wǎng)站的虛擬物理路徑
答:使用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.如何計(jì)算每天的平均反復(fù)訪問人數(shù)
答:解決方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
顯示結(jié)果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998

4.如何顯示隨機(jī)圖象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
顯示
< img src="< %=dpic% >" >

5.如何回到先前的頁(yè)面
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用圖片如:< img src=http://www./Article/data/Access/2005/"arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >

6.如何確定對(duì)方的IP地址
答:< %=Request.serverVariables("REMOTE_ADDR)% >

7.如何鏈結(jié)到一副圖片上
答:< % @Languages=vbs cript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >

8.強(qiáng)迫輸入密碼對(duì)話框
答:把這句話放載頁(yè)面的開頭
< % response.status="401 not Authorized"
response.end
% >

9.如何傳遞變量從一頁(yè)到另一頁(yè)
答:用 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 程序內(nèi)使用 msgbox,程序出錯(cuò)說沒有權(quán)限
答:由于 asp 是服務(wù)器運(yùn)行的,如果可以在服務(wù)器顯示一個(gè)對(duì)話框,那么你只好等有人按了確定之后,你的程序才能繼續(xù)執(zhí)行,而一般服務(wù)器不會(huì)有人守著,所以微軟不得不禁止這個(gè)函數(shù),并胡亂告訴你 (:) 呵呵) 沒有權(quán)限。但是ASP和客戶端腳本結(jié)合倒可以顯示一個(gè)對(duì)話框,as follows:
< % yourVar="測(cè)試對(duì)話框"% >
< % s cript language=‘javas cript‘ >
alert("< %=yourvar% >")
< /s cript >

11.有沒有辦法保護(hù)自己的源代碼,不給人看到
答:可以去下載一個(gè)微軟的Windows s cript Encoder,它可以對(duì)asp的腳本和客戶端javas cript/vbs cript腳本進(jìn)行加密。。。不過客戶端加密后,只有ie5才能執(zhí)行,服務(wù)器端腳本加密后,只有服務(wù)器上安裝有s cript engine 5(裝一個(gè)ie5就有了)才能執(zhí)行。

12.怎樣才能將 query string 從一個(gè) asp 文件傳送到另一個(gè)?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))

13.global.asa文件總是不起作用?
答:只有web目錄設(shè)置為web application, global.asa才有效,并且一個(gè)web application的根目錄下 global.asa才有效。IIS4可以使用Internet Service Manager設(shè)置application setting 怎樣才能使得htm文件如同asp文件一樣可以執(zhí)行腳本代碼?

14.怎樣才能使得htm文件如同asp文件一樣可以執(zhí)行腳本代碼?
答:Internet Sevices Manager - > 選擇default web site - >右鼠鍵- >菜單屬性-〉主目錄- > 應(yīng)用程序設(shè)置(Application Setting)- > 點(diǎn)擊按鈕 "配置"- > app mapping - >點(diǎn)擊按鈕"Add" - > executable browse選擇 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 輸入 htm method exclusions 輸入PUT.DELETE 全部確定即可。但是值得注意的是這樣對(duì)htm也要由asp.dll處理,效率將降低。

15.如何注冊(cè)組件
答:有兩種方法。
第一種方法:手工注冊(cè) DLL 這種方法從IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下來執(zhí)行,進(jìn)入到包含有DLL的目錄,并輸入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它會(huì)把dll的特定信息注冊(cè)入服務(wù)器中的注冊(cè)表中。然后這個(gè)組件就可以在服務(wù)器上使用了,但是這個(gè)方法有一個(gè)缺陷。當(dāng)使用這種方法注冊(cè)完畢組件后,該組件必須要相應(yīng)的設(shè)置NT的匿名賬號(hào)有權(quán)限執(zhí)行這個(gè)dll。特別是一些組件需要讀取注冊(cè)表,所以,這個(gè)注冊(cè)組件的方法僅僅是使用在服務(wù)器上沒有MTS的情況下,要取消注冊(cè)這個(gè)dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll

第二種方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改進(jìn)。MTS允許你指定只有有特權(quán)的用戶才能夠訪問組件,大大提高了網(wǎng)站服務(wù)器上的安全性設(shè)置。在MTS上注冊(cè)組件的步驟如下:
1) 打開IIS管理控制臺(tái)。
2) 展開transaction server,右鍵單擊"pkgs installed"然后選擇"new package"。
3) 單擊"create an empty package"。
4) 給該包命名。
5) 指定administrator賬號(hào)或則使用"interactive"(如果服務(wù)器經(jīng)常是使用administrator 登陸的話)。
6) 現(xiàn)在使用右鍵單擊你剛建立的那個(gè)包下面展開后的"components"。選擇 "new then component"。
7) 選擇 "install new component" 。
8) 找到你的.dll文件然后選擇next到完成。
要?jiǎng)h除這個(gè)對(duì)象,只要選擇它的圖標(biāo),然后選擇delete。
附注:特別要注意第二種方法,它是用來調(diào)試自己編寫組件的最好方法,而不必每次都需要重新啟動(dòng)機(jī)器了。

16. ASP與Access數(shù)據(jù)庫(kù)連接:

<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫(kù)名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=數(shù)據(jù)庫(kù)密碼;dbq="&mdbfile

%>

asp編程有用的例子(二)
17. ASP與SQL數(shù)據(jù)庫(kù)連接:

<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫(kù)密碼;DATABASE=數(shù)據(jù)庫(kù)名稱
%>

建立記錄集對(duì)象:

set rs=server.createobject("adodb.recordset")
rs.open SQL語(yǔ)句,conn,3,2

18. SQL常用命令使用方法:

(1) 數(shù)據(jù)記錄篩選:

sql="select * from 數(shù)據(jù)表 where 字段名=字段值 order by 字段名 [desc]"

sql="select * from 數(shù)據(jù)表 where 字段名 like ‘%字段值%‘ order by 字段名 [desc]"

sql="select top 10 * from 數(shù)據(jù)表 where 字段名 order by 字段名 [desc]"

sql="select * from 數(shù)據(jù)表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"

sql="select * from 數(shù)據(jù)表 where 字段名 between 值1 and 值2"

(2) 更新數(shù)據(jù)記錄:

sql="update 數(shù)據(jù)表 set 字段名=字段值 where 條件表達(dá)式"

sql="update 數(shù)據(jù)表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達(dá)式"

(3) 刪除數(shù)據(jù)記錄:

sql="delete from 數(shù)據(jù)表 where 條件表達(dá)式"

sql="delete from 數(shù)據(jù)表" (將數(shù)據(jù)表所有記錄刪除)
 
(4) 添加數(shù)據(jù)記錄:

sql="insert into 數(shù)據(jù)表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"

sql="insert into 目標(biāo)數(shù)據(jù)表 select * from 源數(shù)據(jù)表" (把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表)

(5) 數(shù)據(jù)記錄統(tǒng)計(jì)函數(shù):

AVG(字段名) 得出一個(gè)表格欄平均值
COUNT(*|字段名) 對(duì)數(shù)據(jù)行數(shù)的統(tǒng)計(jì)或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計(jì)
MAX(字段名) 取得一個(gè)表格欄最大的值
MIN(字段名) 取得一個(gè)表格欄最小的值
SUM(字段名) 把數(shù)據(jù)欄的值相加

引用以上函數(shù)的方法:

sql="select sum(字段名) as 別名 from 數(shù)據(jù)表 where 條件表達(dá)式"
set rs=conn.excute(sql)

用 rs("別名") 獲取統(tǒng)的計(jì)值,其它函數(shù)運(yùn)用同上。

(5) 數(shù)據(jù)表的建立和刪除:

CREATE TABLE 數(shù)據(jù)表名稱(字段1 類型1(長(zhǎng)度),字段2 類型2(長(zhǎng)度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 數(shù)據(jù)表名稱 (永久性刪除一個(gè)數(shù)據(jù)表)

19. 記錄集對(duì)象的方法:

rs.movenext 將記錄指針從當(dāng)前的位置向下移一行
rs.moveprevious 將記錄指針從當(dāng)前的位置向上移一行
rs.movefirst 將記錄指針移到數(shù)據(jù)表第一行
rs.movelast 將記錄指針移到數(shù)據(jù)表最后一行
rs.absoluteposition=N 將記錄指針移到數(shù)據(jù)表第N行
rs.absolutepage=N 將記錄指針移到第N頁(yè)的第一行
rs.pagesize=N 設(shè)置每頁(yè)為N條記錄
rs.pagecount 根據(jù) pagesize 的設(shè)置返回總頁(yè)數(shù)
rs.recordcount 返回記錄總數(shù)
rs.bof 返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.delete 刪除當(dāng)前記錄,但記錄指針不會(huì)向下移動(dòng)
rs.addnew 添加記錄到數(shù)據(jù)表末端
rs.update 更新數(shù)據(jù)表記錄

---------------------------------------

20 Recordset對(duì)象方法

Open方法

recordset.Open Source,ActiveConnection,CursorType,LockType,Options

Source
Recordset對(duì)象可以通過Source屬性來連接Command對(duì)象。Source參數(shù)可以是一個(gè)Command對(duì)象名稱、一段SQL命令、一個(gè)指定的數(shù)據(jù)表名稱或是一個(gè)Stored Procedure。假如省略這個(gè)參數(shù),系統(tǒng)則采用Recordset對(duì)象的Source屬性。

ActiveConnection
Recordset對(duì)象可以通過ActiveConnection屬性來連接Connection對(duì)象。這里的ActiveConnection可以是一個(gè)Connection對(duì)象或是一串包含數(shù)據(jù)庫(kù)連接信息(ConnectionString)的字符串參數(shù)。

CursorType
Recordset對(duì)象Open方法的CursorType參數(shù)表示將以什么樣的游標(biāo)類型啟動(dòng)數(shù)據(jù),包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常數(shù) 常數(shù)值 說明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,啟動(dòng)一個(gè)只能向前移動(dòng)的游標(biāo)(Forward Only)。
adOpenKeyset 1 啟動(dòng)一個(gè)Keyset類型的游標(biāo)。
adOpenDynamic 2 啟動(dòng)一個(gè)Dynamic類型的游標(biāo)。
adOpenStatic 3 啟動(dòng)一個(gè)Static類型的游標(biāo)。
-------------------------------------------------------------
以上幾個(gè)游標(biāo)類型將直接影響到Recordset對(duì)象所有的屬性和方法,以下列表說明他們之間的區(qū)別。

-------------------------------------------------------------
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數(shù)據(jù)庫(kù)。

LockType
Recordset對(duì)象Open方法的LockType參數(shù)表示要采用的Lock類型,如果忽略這個(gè)參數(shù),那么系統(tǒng)會(huì)以Recordset對(duì)象的LockType屬性為預(yù)設(shè)值。LockType參數(shù)包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:

-------------------------------------------------------------
常數(shù) 常數(shù)值 說明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset對(duì)象以只讀方式啟動(dòng),無法運(yùn)行AddNew、Update及Delete等方法
adLockPrssimistic 2 當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)會(huì)暫時(shí)鎖住其他用戶的動(dòng)作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic 3 當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)并不會(huì)鎖住其他用戶的動(dòng)作,其他用戶可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic 4 當(dāng)數(shù)據(jù)源正在更新時(shí),其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對(duì)數(shù)據(jù)進(jìn)行增、
刪、改的操作。
如何在服務(wù)器端調(diào)用winzip命令行對(duì)上傳的多個(gè)文件打包壓縮
-------------------------------------------
如何在服務(wù)器端調(diào)用winzip命令行對(duì)上傳的多個(gè)文件打包壓縮?

要解決這個(gè)問題,首先要了解一下Windows scripting Host,簡(jiǎn)稱為WSH!下面引用一下微軟給的解釋:
************************************************************************
* WSH是微軟腳本技術(shù)系列中的一種,簡(jiǎn)單講,就是提供了一種腳本環(huán)境, *
* 在這個(gè)環(huán)境中,預(yù)定義了一些對(duì)象,同時(shí)也可以使用COM里的其他對(duì)象。 *
* 他使用一種腳本引擎來對(duì)腳本解釋執(zhí)行,微軟自己支持VBscript和Jscript, *
* 第三方也可以開發(fā)自己的腳本引擎。 *
************************************************************************
具體點(diǎn),就是你先編好一些腳本文件(微軟自帶例子若干,后綴.vbs或 .js),
然后用一個(gè)程序?qū)λ忉寛?zhí)行,這個(gè)程序就叫Windows scripting Host,程序
的名字是Wscript.exe(或者命令行的Cscript.exe),你可以查看一下你的機(jī)器
里有沒有這兩個(gè)文件,就知道有沒有WSH了。(win2000是在winnt/system32/下)
這非常像批處理文件,只不過文件里不是命令行,而是腳本語(yǔ)言寫的腳本。

再來簡(jiǎn)單介紹一下WSH自帶的幾個(gè)內(nèi)置對(duì)象包括:

1.由 Wscript.exe 提供的對(duì)象
Wscript 作為 Wscript 公開給腳本引擎。
WshArguments 未公開;通過 Wscript.Arguments 屬性訪問。 入

2.由 WSHom.Ocx 提供的對(duì)象。
WshShell 自動(dòng)對(duì)象。ProgID 是 Wscript.WshShell。
(注:這個(gè)就是我們要用到的,可以執(zhí)行dos命令)
WshNetwork 自動(dòng)對(duì)象。ProgID 是 Wscript.WshNetwork。
WshShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。
WshUrlShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。
WshCollection 未公開;通過 WshNetwork.EnumNetworkDrives 或 WshNetwork.EnumPrinterConnection 方法訪問。
WshEnvironment 未公開;通過 WshShell.Environment 屬性訪問。
WshSpecialFolders 未公開;通過 WshShell.Folder 屬性訪問。

他們主要可以完成環(huán)境變量的獲取,網(wǎng)絡(luò)登陸,驅(qū)動(dòng)器映射,快截方式創(chuàng)建,
程序加載,特殊文件夾(如系統(tǒng)文件夾)信息獲取等功能。

如果你的系統(tǒng)里支持ADO等COM部件,你同樣可以使用,
下面這個(gè)例子演示打開寫字板查看文本文件,同時(shí)創(chuàng)建一個(gè)文本文件并寫入一
段話,你可以把他拷貝到寫字板中,然后以.vbs為后綴存盤,之后雙擊他,

‘test.vbs
‘*********************
‘下面用SHELL對(duì)象啟動(dòng)程序
‘*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad " & Wscript.scriptFullName)


‘***********************************************
‘用COM對(duì)象scripting.FileSystemObject操作文本文件
‘***********************************************
Set fs = Wscript.CreateObject("scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("這是一個(gè)測(cè)試。")
a.Close

也可以在asp等web編程語(yǔ)言中應(yīng)用
<script language="VBscript.Encode" runat=server>
‘上面用SHELL對(duì)象啟動(dòng)程序
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功執(zhí)行!"
else
Response.write " 命令執(zhí)行失??!權(quán)限不夠或者該程序無法在DOS狀態(tài)下運(yùn)行"
end if
</script>
注:
1.其中runat=server必須要有
2.Set WshShell = Wscript.CreateObject("Wscript.Shell")
要改為Set WshShell = server.CreateObject("Wscript.Shell"),
3.參數(shù)1代表SW_SHOWNORMAL, 激活并顯示一個(gè)窗口。若窗口是最小化或最大化,則恢復(fù)到其原來的大小和位置。
4.TRUE代表返回執(zhí)行的錯(cuò)誤,F(xiàn)alse或者為指定代表腳本繼續(xù)執(zhí)行而不等待進(jìn)程結(jié)束。
5.調(diào)用WSH的內(nèi)置對(duì)象了,可以象調(diào)用函數(shù)和過程一樣。
如call WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true)

如果你對(duì)WSH感興趣,想了解更多的話,請(qǐng)察看
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsconwshbasics.asp
http://www./club/bbs/showEssence.asp?id=11136

現(xiàn)在我們言歸正傳來看看如何對(duì)文件進(jìn)行壓縮和解壓!
大家都知道winzip對(duì)文件解壓和壓縮都易如反掌,但是如何通過程序和命令行對(duì)其調(diào)用呢?
當(dāng)然winzip的作者已經(jīng)開發(fā)出
WinZip Command Line Support Add-On Version 1.0
大家去可以去http://www./wzcline.htm 下載wzcline.exe!
前提是本機(jī)須安裝winzip8.0或更高版本的支持,如果你不是winzip8.0,去
http://www./download.htm 下載!

下載后,直接安裝就可以!
就會(huì)在winzip的目錄中產(chǎn)生winzip命令行幫助文件和程序WZZIP.exe,WZUNZIP.EXE。
你可以開始運(yùn)行里調(diào)用:
如:"c:\program files\winzip\wzzip" myfile.zip
也可以拷貝這里兩個(gè)文件到任意目錄下,直接在dos窗口下運(yùn)行
如:wzzip.exe myfile.zip
你可以在系統(tǒng)的環(huán)境變量里加入set path=c:\windows;c:\program files\winzip;
就可以在任何地方不用加入路經(jīng)調(diào)用了!

現(xiàn)在來簡(jiǎn)單的了解一下幫助中兩個(gè)命令的基本用法
壓縮文件用 WZZIP.exe :
通用格式:wzzip [options] zipfile [@listfile] [files...]
[options]包括:
-a 默認(rèn)的操作,壓縮文件
-a+ 壓縮文件,并刪除要壓縮的文件
-b[drive|path] 是在另外的驅(qū)動(dòng)器上創(chuàng)建臨時(shí)壓縮文件
-d 刪除zip文件中指定的目標(biāo)文件
-e 是設(shè)置壓縮比率,x最大,0最小
-f 替換zip文件中存在的文件
-h|-? 察看幫助
-v 創(chuàng)建一個(gè)壓縮文件的列表信息
-@list 先創(chuàng)建一個(gè)包含所有要解壓的文件的文件,然后按所包含的的文件名壓縮
...............(其他具體看幫助文件)
[@listfile] 是壓縮文件的列表信息紀(jì)錄
[files...] 則是要壓縮的多個(gè)文件,用空格隔開,也可以用通配符

例:
壓縮當(dāng)前目錄的所有文件
wzzip test.zip *.*
壓縮類型為txt的所有文件
wzzip test.zip *.txt
壓縮兩個(gè)文件
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
列出一個(gè)壓縮文件的列表內(nèi)容
wzzip -v test.zip


解壓文件用WZUNZIP.exe :
通過格式:wzunzip [options] zipfile [@listfile] [path] [files...]
[options]包括:
-c[m] 解壓是顯示文件列表在dos屏幕中
-d 重建zip文件中的目錄結(jié)構(gòu)
-f 只解壓在zip文件里同目前文件夾存在的同名的文件,如果沒有則不解壓
-jhrs 忽視zip文件里的文件的隱藏、只讀、系統(tǒng)屬性
-Jhrs 只解壓帶有隱藏、只讀、系統(tǒng)屬性的文件
-n 只解壓叫新的文件,如果要解壓的文件比已存在的新則替換。
-o 不用通過yes來確定是否要替換文件
-v 創(chuàng)建一個(gè)壓縮文件的列表信息
-@list 先創(chuàng)建一個(gè)包含所有要解壓的文件的文件,然后按所包含的的文件名解壓
...............(其他具體看幫助文件)
例如:
創(chuàng)建所有文件到當(dāng)前目錄下
wzunzip test.zip
從test.zip中創(chuàng)建abc.txt到當(dāng)前目錄下
wzunzip test.zip abc.txt
創(chuàng)建在test.zip中的目錄結(jié)構(gòu)及文件到當(dāng)前目錄下
wzunzip -d test.zip
創(chuàng)建在test.zip中的目錄結(jié)構(gòu)及文件到c:\docs下
wzunzip -d test.zip c:\docs從test.zip中創(chuàng)建包含在files.ist中的文件名的文件
wzunzip test.zip @files.lst
顯示test.zip的文件列表內(nèi)容
wzunzip -v test.zip
顯示壓縮文件中所有類型為txt的文件列表內(nèi)容
wzunzip -v test.zip *.txt


有了以上的準(zhǔn)備,那么我們現(xiàn)在來編寫VBS來執(zhí)行文件解壓和壓縮就易如反掌了:
‘test.vbs
‘*********************
‘上面用SHELL對(duì)象啟動(dòng)程序
‘*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt")


‘test.asp
‘*********************
‘上面用SHELL對(duì)象啟動(dòng)程序
‘*********************
<script language="VBscript.Encode" runat=server>
‘上面用SHELL對(duì)象啟動(dòng)程序
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run (" c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功執(zhí)行!"
else
Response.write " 命令執(zhí)行失敗!權(quán)限不夠或者該程序無法在DOS狀態(tài)下運(yùn)行"
end if
</script>
利用CDONTS發(fā)送郵件的ASP函數(shù)
<%
‘Last Updated By Recon On 05/14/2001
‘On Error Resume Next

‘利用CDONTS組件在Win2k上發(fā)送郵件

‘發(fā)送普通郵件
SendMail "admin@ny.com", "iamchn@263.net", "Normal Mail!", "Please check the attatchment!", 2, 0, "C:\Love.txt"

‘發(fā)送HTML郵件
Dim m_fso, m_tf
Dim m_strHTML

Set m_fso = Server.CreateObject("scriptING.FILESYSTEMOBJECT")
Set m_tf = m_fso.OpenTextFile("C:\Mail.htm", 1)
m_strHTML = m_tf.ReadAll

‘Write m_strHTML
Set m_tf = Nothing
Set m_fso = Nothing

SendMail "admin@ny.com", "iamchn@263.net", "HTML Mail!", m_strHTML, 2, 1, Null

‘參數(shù)說明
‘strFrom : 發(fā)件人Email
‘strTo : 收件人Email
‘strSubject : 信件主題
‘strBody : 信件正文
‘lngImportance : 信件重要性
‘ : 0 - 低重要性
‘ : 0 - 中等重要性(默認(rèn))
‘ : 0 - 高重要性
‘lngAType : 信件格式
‘ : 為1時(shí)將郵件正文作為HTML(此時(shí)可以發(fā)送HTML郵件)
‘strAttach : 附件的路徑
Sub SendMail(strFrom, strTo, strSubject, strBody, lngImportance, lngAType, strAttach)
Dim objMail

Set objMail = Server.CreateObject("CDONTS.NEWMAIL")
With objMail

.From = strFrom
.To = strTo
.Subject = strSubject
.Body = strBody
.Importance = lngImportance

If lngAType = 1 Then
.BodyFormat = 0
.MailFormat = 0
End If

If IsEmpty(strAttach) = False And IsNull(strAttach) = False Then
.AttachFile strAttach
End If

.Send
End With
Set objMail = Nothing
End Sub
%>
處理驅(qū)動(dòng)器和文件夾


使用 FileSystemObject (FSO) 對(duì)象模式,可以有計(jì)劃地處理驅(qū)動(dòng)器和文件夾,就像在 Windows 資源管理器中交互式地處理它們一樣??梢詮?fù)制和移動(dòng)文件夾,獲取有關(guān)驅(qū)動(dòng)器和文件夾的信息,等等。

獲取有關(guān)驅(qū)動(dòng)器的信息
可以用 Drive 對(duì)象來獲得有關(guān)各種驅(qū)動(dòng)器的信息,這些驅(qū)動(dòng)器是實(shí)物地或通過網(wǎng)絡(luò)連接到系統(tǒng)上的。它的屬性可以用來獲得下面的信息內(nèi)容:

驅(qū)動(dòng)器的總?cè)萘?,以字?jié)為單位(TotalSize 屬性)
驅(qū)動(dòng)器的可用空間是多少,以字節(jié)為單位(AvailableSpace 或 FreeSpace 屬性)
哪個(gè)號(hào)被賦給了該驅(qū)動(dòng)器(DriveLetter 屬性)
驅(qū)動(dòng)器的類型是什么,如可移動(dòng)的、固定的、網(wǎng)絡(luò)的、CD-ROM 或 RAM 磁盤(DriveType 屬性)
驅(qū)動(dòng)器的序列號(hào)(SerialNumber 屬性)
驅(qū)動(dòng)器使用的文件系統(tǒng)類型,如 FAT、FAT32、NTFS 等等(FileSystem 屬性)
驅(qū)動(dòng)器是否可以使用(IsReady 屬性)
共享和/或卷的名字(ShareName 和 VolumeName 屬性)
驅(qū)動(dòng)器的路徑或根文件夾(Path 和 RootFolder 屬性)
請(qǐng)考察示例代碼,來領(lǐng)會(huì)如何在 FileSystemObject 中使用這些屬性。

Drive 對(duì)象用法示例
使用 Drive 對(duì)象來收集有關(guān)驅(qū)動(dòng)器的信息。在下面的代碼中,沒有對(duì)實(shí)際的 Drive 對(duì)象的引用;相反,使用 GetDrive 方法來獲得現(xiàn)有 Drive 對(duì)象的引用(在這個(gè)例子中就是 drv)。
下面示例示范了如何在 VBscript 中使用 Drive 對(duì)象:

Sub ShowDriveInfo(drvPath)
Dim fso, drv, s
Set fso = CreateObject("scripting.FileSystemObject")
Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
s = "Drive " & UCase(drvPath) & " - "
s = s & drv.VolumeName & "
"
s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
s = s & " Kb" & "
"
s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
s = s & " Kb" & "
"
Response.Write s
End Sub

下面的代碼說明在 Jscript 中實(shí)現(xiàn)同樣的功能:
function ShowDriveInfo1(drvPath)
{
var fso, drv, s ="";
fso = new ActiveXObject("scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName(drvPath));
s += "Drive " + drvPath.toUpperCase()+ " - ";
s += drv.VolumeName + "
";
s += "Total Space: " + drv.TotalSize / 1024;
s += " Kb" + "
";
s += "Free Space: " + drv.FreeSpace / 1024;
s += " Kb" + "
";
Response.Write(s);
}

處理文件夾
在下面的表中,描述了普通的文件夾任務(wù)和執(zhí)行它們的方法。
任務(wù) 方法
創(chuàng)建文件夾。 FileSystemObject.CreateFolder
刪除文件夾。 Folder.Delete 或 FileSystemObject.DeleteFolder
移動(dòng)文件夾。 Folder.Move 或 FileSystemObject.MoveFolder
復(fù)制文件夾。 Folder.Copy 或 FileSystemObject.CopyFolder
檢索文件夾的名字。 Folder.Name
如果文件夾在驅(qū)動(dòng)器上存在,則找出它。 FileSystemObject.FolderExists
獲得現(xiàn)有 Folder 對(duì)象的實(shí)例。 FileSystemObject.GetFolder
找出文件夾的父文件夾名。 FileSystemObject.GetParentFolderName
找出系統(tǒng)文件夾的路徑。 FileSystemObject.GetSpecialFolder


請(qǐng)考察示例代碼,來看看在 FileSystemObject 中使用了多少種這些的方法和屬性。

下面的示例示范了如何在 VBscript 中使用 Folder 和 FileSystemObject 對(duì)象,來操作文件夾和獲得有關(guān)它們的信息:


Sub ShowFolderInfo()
Dim fso, fldr, s
‘ 獲得 FileSystemObject 的實(shí)例。
Set fso = CreateObject("scripting.FileSystemObject")
‘ 獲得 Drive 對(duì)象。
Set fldr = fso.GetFolder("c:")
‘ 打印父文件夾名字。
Response.Write "Parent folder name is: " & fldr & "
"
‘ 打印驅(qū)動(dòng)器名字。
Response.Write "Contained on drive " & fldr.Drive & "
"
‘ 打印根文件名。
If fldr.IsRootFolder = True Then
Response.Write "This is the root folder." & ""
"
"
Else
Response.Write "This folder isn‘t a root folder." & "

"
End If
‘ 用 FileSystemObject 對(duì)象創(chuàng)建新的文件夾。
fso.CreateFolder ("C:\Bogus")
Response.Write "Created folder C:\Bogus" & "
"
‘ 打印文件夾的基本名字。
Response.Write "Basename = " & fso.GetBaseName("c:\bogus") & "
"
‘ 刪除新創(chuàng)建的文件夾。
fso.DeleteFolder ("C:\Bogus")
Response.Write "Deleted folder C:\Bogus" & "
"
End Sub

下面的示例顯示如何在 Jscript 中使用 Folder 和 FileSystemObject 對(duì)象:
function ShowFolderInfo()
{
var fso, fldr, s = "";
// 獲得 FileSystemObject 的實(shí)例。
fso = new ActiveXObject("scripting.FileSystemObject");
// 獲得 Drive 對(duì)象。
fldr = fso.GetFolder("c:");
// 打印父文件夾名。
Response.Write("Parent folder name is: " + fldr + "
");
// 打印驅(qū)動(dòng)器名字。
Response.Write("Contained on drive " + fldr.Drive + "
");
// 打印根文件名。
if (fldr.IsRootFolder)
Response.Write("This is the root folder.");
else
Response.Write("This folder isn‘t a root folder.");
Response.Write("

");
// 用 FileSystemObject 對(duì)象創(chuàng)建新的文件夾。
fso.CreateFolder ("C:\\Bogus");
Response.Write("Created folder C:\\Bogus" + "
");
// 打印文件夾的基本名。
Response.Write("Basename = " + fso.GetBaseName("c:\\bogus") + "
");
// 刪除新創(chuàng)建的文件夾。
fso.DeleteFolder ("C:\\Bogus");
Response.Write("Deleted folder C:\\Bogus" + "
");
}
ASP分頁(yè)函數(shù)

Function ExportPageInfo(ByRef rs,curpage,i,LinkFile)
Dim retval, j, pageNumber, BasePage

retval = "第" & curpage & "頁(yè)/總" & rs.pagecount & "頁(yè) "
retval = retval & "本頁(yè)" & i & "條/總" & rs.recordcount & "條 "

If curpage = 1 Then
retval = retval & "首頁(yè) 前頁(yè) "
Else
retval = retval & "首頁(yè) 前頁(yè) "
End If
If curpage = rs.pagecount Then
retval = retval & "后頁(yè) 末頁(yè)"
Else
retval = retval & "后頁(yè) 末頁(yè)"
End if

retval = retval & "
"
BasePage = (curpage \ 10) * 10
If BasePage > 0 Then retval = retval & " <<"
For j = 1 to 10
pageNumber = BasePage + j
If PageNumber > rs.pagecount Then Exit For
If pageNumber = Cint(curpage) Then
retval = retval & " " & pageNumber & ""
Else
retval = retval & " " & pageNumber & ""
End If
Next
If rs.pagecount > BasePage Then retval = retval & " >>"

ExportPageInfo = retval
End Function

應(yīng)用

<%
adoPageRS.open "SELECT * FROM news ORDER BY addtime DESC", conn, 1, 1
if err.number <> 0 then
response.write "數(shù)據(jù)庫(kù)操作失?。?&err.description
else
if adoPageRS.eof and adoPageRS.bof then
response.write "沒有記錄"
else
%>








<%
adoPageRS.pagesize = 10
adoPageRS.absolutepage = curpage
for i = 0 to 9
%>





<%
adoPageRS.movenext
if adoPageRS.eof then
i = i + 1
exit for
End If
next
%>



新 聞 標(biāo) 題 日期 操  作
<%= adoPageRS("title") %>
<% = adoPageRS("addtime") %>
‘>編輯
)‘>刪除

<% = ExportPageInfo(adoPageRS, curpage, i, "Newsman.asp?") %>




asp常常用到的一些東西,
<%=Request.ServerVariables("remote_addr")%>

FOR each item in Request.form
tempvalue=trim(Request(item))
tempvalue=Replace(tempvalue,chr(13)&chr(10),"
")
tempvalue=Replace(tempvalue,"

","
")
if tempvalue="" then tempvalue=0
Execute item&"="""&tempvalue&""""
‘response.write item&"="&tempvalue&"
"
next
‘response.write request("id")
‘response.end

if ="" then
response.write "<script language=‘javascript‘>window.alert(‘‘)</script>"
response.write "<script language=‘javascript‘>window.history.go(-1);</script>"
response.end
end if

<--#include file="" -->
<--#include virtual="" -->

sql="select max(id) from pack"
set RS=conn.execute(sql)
if isnull(RS(0)) then
id=1
else
id=RS(0)+1
end if
set rs=nothing


sql="insert into pack(id,strpackdm,strusername) values("&id&",‘"&strpackdm&"‘,‘"&Session("username")&"‘)"
set RS=conn.execute(sql)


sql="update pack set "&Itemname&"=‘"&tempvalue&"‘ where id="&id&""
if Itemname<>"id" then
response.write sql&"
"
set rs=conn.execute(sql)


if err.number<>0 then
‘錯(cuò)誤處理
response.write "數(shù)據(jù)庫(kù)操作失?。? & err.description
err.clear
end if

Set rs=Nothing
Conn.close
Set conn=Nothing

do while not rs.eof and rowcount>0

rowcount=rowcount-1
rs.MoveNext

do while not rs.eof

rs.MoveNext
loop

for each item in rs2.fields
Execute item.name&"="""&trim(rs2(""&item.name&""))&""""
next


function Mycn(str)
str=lcase(str)
str=replace(str,"","")
response.write str
end function

dim conn
dim connstr
on error resume next
set conn=server.CreateObject("adodb.connection")

Connstr="driver=SQL Server; server="&servername&"; uid="&username&"; pwd="&password&"; database="&datebasename&";"

Connstr="DBQ="+server.mappath(mydbpath&mdbname)+";DRIVER={Microsoft Access Driver (*.mdb)};"

‘response.write Connstr
‘response.end
conn.Open connstr
if err<>0 then
Response.Write "無法建立到數(shù)據(jù)庫(kù)的連接!"
end if

MD5不可逆加密算法的ASP實(shí)現(xiàn)實(shí)例(一)

此為國(guó)外轉(zhuǎn)載函數(shù),可將任意字符轉(zhuǎn)換為md5 16為字符加密形式,而且為不可逆轉(zhuǎn)換。
<%
Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32

Private m_lOnBits(30)
Private m_l2Power(30)

Private Function LShift(lvalue, iShiftBits)
If iShiftBits = 0 Then
LShift = lvalue
Exit Function
ElseIf iShiftBits = 31 Then
If lvalue And 1 Then
LShift = &H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If

If (lvalue And m_l2Power(31 - iShiftBits)) Then
LShift = ((lvalue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
Else
LShift = ((lvalue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
End If
End Function

Private Function RShift(lvalue, iShiftBits)
If iShiftBits = 0 Then
RShift = lvalue
Exit Function
ElseIf iShiftBits = 31 Then
If lvalue And &H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If

RShift = (lvalue And &H7FFFFFFE) \ m_l2Power(iShiftBits)

If (lvalue And &H80000000) Then
RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
End If
End Function

Private Function RotateLeft(lvalue, iShiftBits)
RotateLeft = LShift(lvalue, iShiftBits) Or RShift(lvalue, (32 - iShiftBits))
End Function

Private Function AddUnsigned(lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult

lX8 = lX And &H80000000
lY8 = lY And &H80000000
lX4 = lX And &H40000000
lY4 = lY And &H40000000

lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)

If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If

AddUnsigned = lResult
End Function

Private Function md5_F(x, y, z)
md5_F = (x And y) Or ((Not x) And z)
End Function

Private Function md5_G(x, y, z)
md5_G = (x And z) Or (y And (Not z))
End Function

Private Function md5_H(x, y, z)
md5_H = (x Xor y Xor z)
End Function

Private Function md5_I(x, y, z)
md5_I = (y Xor (x Or (Not z)))
End Function

Private Sub md5_FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Sub md5_GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Sub md5_HH(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Sub md5_II(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Function ConvertToWordArray(sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray()
Dim lBytePosition
Dim lByteCount
Dim lWordCount

Const MODULUS_BITS = 512
Const CONGRUENT_BITS = 448

lMessageLength = Len(sMessage)

lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)

lBytePosition = 0
lByteCount = 0
Do Until lByteCount >= lMessageLength
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
Loop

lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE

lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)

lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)

ConvertToWordArray = lWordArray
End Function

Private Function WordToHex(lvalue)
Dim lByte
Dim lCount

For lCount = 0 To 3
lByte = RShift(lvalue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
Next
End Function



Top


MD5不可逆加密算法的ASP實(shí)現(xiàn)實(shí)例(一)
--------------------------------------

Public Function MD5(sMessage)
m_lOnBits(0) = CLng(1)
m_lOnBits(1) = CLng(3)
m_lOnBits(2) = CLng(7)
m_lOnBits(3) = CLng(15)
m_lOnBits(4) = CLng(31)
m_lOnBits(5) = CLng(63)
m_lOnBits(6) = CLng(127)
m_lOnBits(7) = CLng(255)
m_lOnBits(8) = CLng(511)
m_lOnBits(9) = CLng(1023)
m_lOnBits(10) = CLng(2047)
m_lOnBits(11) = CLng(4095)
m_lOnBits(12) = CLng(8191)
m_lOnBits(13) = CLng(16383)
m_lOnBits(14) = CLng(32767)
m_lOnBits(15) = CLng(65535)
m_lOnBits(16) = CLng(131071)
m_lOnBits(17) = CLng(262143)
m_lOnBits(18) = CLng(524287)
m_lOnBits(19) = CLng(1048575)
m_lOnBits(20) = CLng(2097151)
m_lOnBits(21) = CLng(4194303)
m_lOnBits(22) = CLng(8388607)
m_lOnBits(23) = CLng(16777215)
m_lOnBits(24) = CLng(33554431)
m_lOnBits(25) = CLng(67108863)
m_lOnBits(26) = CLng(134217727)
m_lOnBits(27) = CLng(268435455)
m_lOnBits(28) = CLng(536870911)
m_lOnBits(29) = CLng(1073741823)
m_lOnBits(30) = CLng(2147483647)

m_l2Power(0) = CLng(1)
m_l2Power(1) = CLng(2)
m_l2Power(2) = CLng(4)
m_l2Power(3) = CLng(8)
m_l2Power(4) = CLng(16)
m_l2Power(5) = CLng(32)
m_l2Power(6) = CLng(64)
m_l2Power(7) = CLng(128)
m_l2Power(8) = CLng(256)
m_l2Power(9) = CLng(512)
m_l2Power(10) = CLng(1024)
m_l2Power(11) = CLng(2048)
m_l2Power(12) = CLng(4096)
m_l2Power(13) = CLng(8192)
m_l2Power(14) = CLng(16384)
m_l2Power(15) = CLng(32768)
m_l2Power(16) = CLng(65536)
m_l2Power(17) = CLng(131072)
m_l2Power(18) = CLng(262144)
m_l2Power(19) = CLng(524288)
m_l2Power(20) = CLng(1048576)
m_l2Power(21) = CLng(2097152)
m_l2Power(22) = CLng(4194304)
m_l2Power(23) = CLng(8388608)
m_l2Power(24) = CLng(16777216)
m_l2Power(25) = CLng(33554432)
m_l2Power(26) = CLng(67108864)
m_l2Power(27) = CLng(134217728)
m_l2Power(28) = CLng(268435456)
m_l2Power(29) = CLng(536870912)
m_l2Power(30) = CLng(1073741824)


Dim x
Dim k
Dim AA
Dim BB
Dim CC
Dim DD
Dim a
Dim b
Dim c
Dim d

Const S11 = 7
Const S12 = 12
Const S13 = 17
Const S14 = 22
Const S21 = 5
Const S22 = 9
Const S23 = 14
Const S24 = 20
Const S31 = 4
Const S32 = 11
Const S33 = 16
Const S34 = 23
Const S41 = 6
Const S42 = 10
Const S43 = 15
Const S44 = 21

x = ConvertToWordArray(sMessage)

a = &H67452301
b = &HEFCDAB89
c = &H98BADCFE
d = &H10325476

For k = 0 To UBound(x) Step 16
AA = a
BB = b
CC = c
DD = d

md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478
md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756
md5_FF c, d, a, b, x(k + 2), S13, &H242070DB
md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A
md5_FF c, d, a, b, x(k + 6), S13, &HA8304613
md5_FF b, c, d, a, x(k + 7), S14, &HFD469501
md5_FF a, b, c, d, x(k + 8), S11, &H698098D8
md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE
md5_FF a, b, c, d, x(k + 12), S11, &H6B901122
md5_FF d, a, b, c, x(k + 13), S12, &HFD987193
md5_FF c, d, a, b, x(k + 14), S13, &HA679438E
md5_FF b, c, d, a, x(k + 15), S14, &H49B40821

md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562
md5_GG d, a, b, c, x(k + 6), S22, &HC040B340
md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51
md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D
md5_GG d, a, b, c, x(k + 10), S22, &H2441453
md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681
md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6
md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87
md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED
md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905
md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9
md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A

md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942
md5_HH d, a, b, c, x(k + 8), S32, &H8771F681
md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122
md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C
md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6
md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA
md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085
md5_HH b, c, d, a, x(k + 6), S34, &H4881D05
md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039
md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665

md5_II a, b, c, d, x(k + 0), S41, &HF4292244
md5_II d, a, b, c, x(k + 7), S42, &H432AFF97
md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7
md5_II b, c, d, a, x(k + 5), S44, &HFC93A039
md5_II a, b, c, d, x(k + 12), S41, &H655B59C3
md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92
md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D
md5_II b, c, d, a, x(k + 1), S44, &H85845DD1
md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F
md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
md5_II c, d, a, b, x(k + 6), S43, &HA3014314
md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1
md5_II a, b, c, d, x(k + 4), S41, &HF7537E82
md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235
md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
md5_II b, c, d, a, x(k + 9), S44, &HEB86D391

a = AddUnsigned(a, AA)
b = AddUnsigned(b, BB)
c = AddUnsigned(c, CC)
d = AddUnsigned(d, DD)
Next

MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
‘ MD5=LCase(WordToHex(b) & WordToHex(c)) ‘I crop this to fit 16byte database password :D
End Function

Response.Write "123456的加密結(jié)果為[" & md5 ("123456") & "]"
%>




<%
‘#######以下是一個(gè)類文件,下面的注解是調(diào)用類的方法################################################
‘# 注意:如果系統(tǒng)不支持建立scripting.FileSystemObject對(duì)象,那么數(shù)據(jù)庫(kù)壓縮功能將無法使用
‘# Access 數(shù)據(jù)庫(kù)類
‘# CreateDbFile 建立一個(gè)Access 數(shù)據(jù)庫(kù)文件
‘# CompactDatabase 壓縮一個(gè)Access 數(shù)據(jù)庫(kù)文件
‘# 建立對(duì)象方法:
‘# Set a = New DatabaseTools
‘# by (蕭寒雪) s.f.
‘#########################################################################################


Class DatabaseTools

Public function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)
‘建立數(shù)據(jù)庫(kù)文件
‘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 ("對(duì)不起,該數(shù)據(jù)庫(kù)已經(jīng)存在!")
CreateDBfile = False
Else
Dim Ca
Set Ca = Server.CreateObject("ADOX.Catalog")
If Err.number<>0 Then
Response.Write ("無法建立,請(qǐng)檢查錯(cuò)誤信息
" & 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)
‘壓縮數(shù)據(jù)庫(kù)文件
‘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 ("對(duì)不起,該數(shù)據(jù)庫(kù)已經(jīng)存在!")
CompactDatabase = False
Else
Dim Cd
Set Cd =Server.CreateObject("JRO.JetEngine")
If Err.number<>0 Then
Response.Write ("無法壓縮,請(qǐng)檢查錯(cuò)誤信息
" & 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
‘刪除舊的數(shù)據(jù)庫(kù)文件
call DeleteFile(SavePath & dbFileName)
‘將壓縮后的數(shù)據(jù)庫(kù)文件還原
call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName)
Set Cd = False
CompactDatabase = True
End If
end function

Public function DbExists(byVal dbPath)
‘查找數(shù)據(jù)庫(kù)文件是否存在
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()
‘取當(dāng)前真實(shí)路徑
AppPath = Server.MapPath("./")
End function

Public function AppName()
‘取當(dāng)前程序名稱
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)
‘刪除一個(gè)文件
Dim fso
Set fso = CreateObject("scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("刪除文件發(fā)生錯(cuò)誤!請(qǐng)查看錯(cuò)誤信息
" & 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)
‘修改一個(gè)文件
Dim fso
Set fso = CreateObject("scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("修改文件名時(shí)發(fā)生錯(cuò)誤!請(qǐng)查看錯(cuò)誤信息
" & 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
%>

現(xiàn)在已可以壓縮有密碼的數(shù)據(jù)庫(kù),代碼如下,但是壓縮之后的數(shù)據(jù)庫(kù)密碼就沒有了!如何解決?

<%
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 = "你的數(shù)據(jù)庫(kù), " & dbpath & ", 已經(jīng)壓縮成功!" & vbCrLf

Else
CompactDB = "數(shù)據(jù)庫(kù)名稱或路徑不正確. 請(qǐng)重試!" & vbCrLf
End If

End Function
%>





asp編程有用的例子(一)
1.如何用Asp判斷你的網(wǎng)站的虛擬物理路徑
答:使用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.如何計(jì)算每天的平均反復(fù)訪問人數(shù)
答:解決方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
顯示結(jié)果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998

4.如何顯示隨機(jī)圖象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
顯示
< img src="< %=dpic% >" >
5.如何回到先前的頁(yè)面
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用圖片如:< img src=http://www./Article/data/Access/2005/"arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >

6.如何確定對(duì)方的IP地址
答:< %=Request.serverVariables("REMOTE_ADDR)% >

7.如何鏈結(jié)到一副圖片上
答:< % @Languages=vbs cript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >

8.強(qiáng)迫輸入密碼對(duì)話框
答:把這句話放載頁(yè)面的開頭
< % response.status="401 not Authorized"
response.end
% >

9.如何傳遞變量從一頁(yè)到另一頁(yè)
答:用 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 程序內(nèi)使用 msgbox,程序出錯(cuò)說沒有權(quán)限
答:由于 asp 是服務(wù)器運(yùn)行的,如果可以在服務(wù)器顯示一個(gè)對(duì)話框,那么你只好等有人按了確定之后,你的程序才能繼續(xù)執(zhí)行,而一般服務(wù)器不會(huì)有人守著,所以微軟不得不禁止這個(gè)函數(shù),并胡亂告訴你 (:) 呵呵) 沒有權(quán)限。但是ASP和客戶端腳本結(jié)合倒可以顯示一個(gè)對(duì)話框,as follows:
< % yourVar="測(cè)試對(duì)話框"% >
< % s cript language=‘javas cript‘ >
alert("< %=yourvar% >")
< /s cript >

11.有沒有辦法保護(hù)自己的源代碼,不給人看到
答:可以去下載一個(gè)微軟的Windows s cript Encoder,它可以對(duì)asp的腳本和客戶端javas cript/vbs cript腳本進(jìn)行加密。。。不過客戶端加密后,只有ie5才能執(zhí)行,服務(wù)器端腳本加密后,只有服務(wù)器上安裝有s cript engine 5(裝一個(gè)ie5就有了)才能執(zhí)行。

12.怎樣才能將 query string 從一個(gè) asp 文件傳送到另一個(gè)?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))

13.global.asa文件總是不起作用?
答:只有web目錄設(shè)置為web application, global.asa才有效,并且一個(gè)web application的根目錄下 global.asa才有效。IIS4可以使用Internet Service Manager設(shè)置application setting 怎樣才能使得htm文件如同asp文件一樣可以執(zhí)行腳本代碼?

14.怎樣才能使得htm文件如同asp文件一樣可以執(zhí)行腳本代碼?
答:Internet Sevices Manager - > 選擇default web site - >右鼠鍵- >菜單屬性-〉主目錄- > 應(yīng)用程序設(shè)置(Application Setting)- > 點(diǎn)擊按鈕 "配置"- > app mapping - >點(diǎn)擊按鈕"Add" - > executable browse選擇 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 輸入 htm method exclusions 輸入PUT.DELETE 全部確定即可。但是值得注意的是這樣對(duì)htm也要由asp.dll處理,效率將降低。

15.如何注冊(cè)組件
答:有兩種方法。
第一種方法:手工注冊(cè) DLL 這種方法從IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下來執(zhí)行,進(jìn)入到包含有DLL的目錄,并輸入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它會(huì)把dll的特定信息注冊(cè)入服務(wù)器中的注冊(cè)表中。然后這個(gè)組件就可以在服務(wù)器上使用了,但是這個(gè)方法有一個(gè)缺陷。當(dāng)使用這種方法注冊(cè)完畢組件后,該組件必須要相應(yīng)的設(shè)置NT的匿名賬號(hào)有權(quán)限執(zhí)行這個(gè)dll。特別是一些組件需要讀取注冊(cè)表,所以,這個(gè)注冊(cè)組件的方法僅僅是使用在服務(wù)器上沒有MTS的情況下,要取消注冊(cè)這個(gè)dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll

第二種方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改進(jìn)。MTS允許你指定只有有特權(quán)的用戶才能夠訪問組件,大大提高了網(wǎng)站服務(wù)器上的安全性設(shè)置。在MTS上注冊(cè)組件的步驟如下:
1) 打開IIS管理控制臺(tái)。
2) 展開transaction server,右鍵單擊"pkgs installed"然后選擇"new package"。
3) 單擊"create an empty package"。
4) 給該包命名。
5) 指定administrator賬號(hào)或則使用"interactive"(如果服務(wù)器經(jīng)常是使用administrator 登陸的話)。
6) 現(xiàn)在使用右鍵單擊你剛建立的那個(gè)包下面展開后的"components"。選擇 "new then component"。
7) 選擇 "install new component" 。
8) 找到你的.dll文件然后選擇next到完成。
要?jiǎng)h除這個(gè)對(duì)象,只要選擇它的圖標(biāo),然后選擇delete。
附注:特別要注意第二種方法,它是用來調(diào)試自己編寫組件的最好方法,而不必每次都需要重新啟動(dòng)機(jī)器了。

16. ASP與Access數(shù)據(jù)庫(kù)連接:

<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫(kù)名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=數(shù)據(jù)庫(kù)密碼;dbq="&mdbfile

%>

asp編程有用的例子(二)
17. ASP與SQL數(shù)據(jù)庫(kù)連接:

<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫(kù)密碼;DATABASE=數(shù)據(jù)庫(kù)名稱
%>

建立記錄集對(duì)象:

set rs=server.createobject("adodb.recordset")
rs.open SQL語(yǔ)句,conn,3,2

18. SQL常用命令使用方法:

(1) 數(shù)據(jù)記錄篩選:

sql="select * from 數(shù)據(jù)表 where 字段名=字段值 order by 字段名 [desc]"

sql="select * from 數(shù)據(jù)表 where 字段名 like ‘%字段值%‘ order by 字段名 [desc]"

sql="select top 10 * from 數(shù)據(jù)表 where 字段名 order by 字段名 [desc]"

sql="select * from 數(shù)據(jù)表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"

sql="select * from 數(shù)據(jù)表 where 字段名 between 值1 and 值2"

(2) 更新數(shù)據(jù)記錄:

sql="update 數(shù)據(jù)表 set 字段名=字段值 where 條件表達(dá)式"

sql="update 數(shù)據(jù)表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達(dá)式"

(3) 刪除數(shù)據(jù)記錄:

sql="delete from 數(shù)據(jù)表 where 條件表達(dá)式"

sql="delete from 數(shù)據(jù)表" (將數(shù)據(jù)表所有記錄刪除)

(4) 添加數(shù)據(jù)記錄:

sql="insert into 數(shù)據(jù)表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"

sql="insert into 目標(biāo)數(shù)據(jù)表 select * from 源數(shù)據(jù)表" (把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表)

(5) 數(shù)據(jù)記錄統(tǒng)計(jì)函數(shù):

AVG(字段名) 得出一個(gè)表格欄平均值
COUNT(*|字段名) 對(duì)數(shù)據(jù)行數(shù)的統(tǒng)計(jì)或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計(jì)
MAX(字段名) 取得一個(gè)表格欄最大的值
MIN(字段名) 取得一個(gè)表格欄最小的值
SUM(字段名) 把數(shù)據(jù)欄的值相加

引用以上函數(shù)的方法:

sql="select sum(字段名) as 別名 from 數(shù)據(jù)表 where 條件表達(dá)式"
set rs=conn.excute(sql)

用 rs("別名") 獲取統(tǒng)的計(jì)值,其它函數(shù)運(yùn)用同上。

(5) 數(shù)據(jù)表的建立和刪除:

CREATE TABLE 數(shù)據(jù)表名稱(字段1 類型1(長(zhǎng)度),字段2 類型2(長(zhǎng)度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 數(shù)據(jù)表名稱 (永久性刪除一個(gè)數(shù)據(jù)表)

19. 記錄集對(duì)象的方法:

rs.movenext 將記錄指針從當(dāng)前的位置向下移一行
rs.moveprevious 將記錄指針從當(dāng)前的位置向上移一行
rs.movefirst 將記錄指針移到數(shù)據(jù)表第一行
rs.movelast 將記錄指針移到數(shù)據(jù)表最后一行
rs.absoluteposition=N 將記錄指針移到數(shù)據(jù)表第N行
rs.absolutepage=N 將記錄指針移到第N頁(yè)的第一行
rs.pagesize=N 設(shè)置每頁(yè)為N條記錄
rs.pagecount 根據(jù) pagesize 的設(shè)置返回總頁(yè)數(shù)
rs.recordcount 返回記錄總數(shù)
rs.bof 返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.delete 刪除當(dāng)前記錄,但記錄指針不會(huì)向下移動(dòng)
rs.addnew 添加記錄到數(shù)據(jù)表末端
rs.update 更新數(shù)據(jù)表記錄

---------------------------------------

20 Recordset對(duì)象方法

Open方法

recordset.Open Source,ActiveConnection,CursorType,LockType,Options

Source
Recordset對(duì)象可以通過Source屬性來連接Command對(duì)象。Source參數(shù)可以是一個(gè)Command對(duì)象名稱、一段SQL命令、一個(gè)指定的數(shù)據(jù)表名稱或是一個(gè)Stored Procedure。假如省略這個(gè)參數(shù),系統(tǒng)則采用Recordset對(duì)象的Source屬性。

ActiveConnection
Recordset對(duì)象可以通過ActiveConnection屬性來連接Connection對(duì)象。這里的ActiveConnection可以是一個(gè)Connection對(duì)象或是一串包含數(shù)據(jù)庫(kù)連接信息(ConnectionString)的字符串參數(shù)。

CursorType
Recordset對(duì)象Open方法的CursorType參數(shù)表示將以什么樣的游標(biāo)類型啟動(dòng)數(shù)據(jù),包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常數(shù) 常數(shù)值 說明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,啟動(dòng)一個(gè)只能向前移動(dòng)的游標(biāo)(Forward Only)。
adOpenKeyset 1 啟動(dòng)一個(gè)Keyset類型的游標(biāo)。
adOpenDynamic 2 啟動(dòng)一個(gè)Dynamic類型的游標(biāo)。
adOpenStatic 3 啟動(dòng)一個(gè)Static類型的游標(biāo)。
-------------------------------------------------------------
以上幾個(gè)游標(biāo)類型將直接影響到Recordset對(duì)象所有的屬性和方法,以下列表說明他們之間的區(qū)別。

-------------------------------------------------------------
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數(shù)據(jù)庫(kù)。

LockType
Recordset對(duì)象Open方法的LockType參數(shù)表示要采用的Lock類型,如果忽略這個(gè)參數(shù),那么系統(tǒng)會(huì)以Recordset對(duì)象的LockType屬性為預(yù)設(shè)值。LockType參數(shù)包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:

-------------------------------------------------------------
常數(shù) 常數(shù)值 說明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset對(duì)象以只讀方式啟動(dòng),無法運(yùn)行AddNew、Update及Delete等方法
adLockPrssimistic 2 當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)會(huì)暫時(shí)鎖住其他用戶的動(dòng)作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic 3 當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)并不會(huì)鎖住其他用戶的動(dòng)作,其他用戶可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic 4 當(dāng)數(shù)據(jù)源正在更新時(shí),其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對(duì)數(shù)據(jù)進(jìn)行增、
刪、改的操作。
如何在服務(wù)器端調(diào)用winzip命令行對(duì)上傳的多個(gè)文件打包壓縮
-------------------------------------------
如何在服務(wù)器端調(diào)用winzip命令行對(duì)上傳的多個(gè)文件打包壓縮?

要解決這個(gè)問題,首先要了解一下Windows scripting Host,簡(jiǎn)稱為WSH!下面引用一下微軟給的解釋:
************************************************************************
* WSH是微軟腳本技術(shù)系列中的一種,簡(jiǎn)單講,就是提供了一種腳本環(huán)境, *
* 在這個(gè)環(huán)境中,預(yù)定義了一些對(duì)象,同時(shí)也可以使用COM里的其他對(duì)象。 *
* 他使用一種腳本引擎來對(duì)腳本解釋執(zhí)行,微軟自己支持VBscript和Jscript, *
* 第三方也可以開發(fā)自己的腳本引擎。 *
************************************************************************
具體點(diǎn),就是你先編好一些腳本文件(微軟自帶例子若干,后綴.vbs或 .js),
然后用一個(gè)程序?qū)λ忉寛?zhí)行,這個(gè)程序就叫Windows scripting Host,程序
的名字是Wscript.exe(或者命令行的Cscript.exe),你可以查看一下你的機(jī)器
里有沒有這兩個(gè)文件,就知道有沒有WSH了。(win2000是在winnt/system32/下)
這非常像批處理文件,只不過文件里不是命令行,而是腳本語(yǔ)言寫的腳本。

再來簡(jiǎn)單介紹一下WSH自帶的幾個(gè)內(nèi)置對(duì)象包括:

1.由 Wscript.exe 提供的對(duì)象
Wscript 作為 Wscript 公開給腳本引擎。
WshArguments 未公開;通過 Wscript.Arguments 屬性訪問。 入

2.由 WSHom.Ocx 提供的對(duì)象。
WshShell 自動(dòng)對(duì)象。ProgID 是 Wscript.WshShell。
(注:這個(gè)就是我們要用到的,可以執(zhí)行dos命令)
WshNetwork 自動(dòng)對(duì)象。ProgID 是 Wscript.WshNetwork。
WshShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。
WshUrlShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。
WshCollection 未公開;通過 WshNetwork.EnumNetworkDrives 或 WshNetwork.EnumPrinterConnection 方法訪問。
WshEnvironment 未公開;通過 WshShell.Environment 屬性訪問。
WshSpecialFolders 未公開;通過 WshShell.Folder 屬性訪問。

他們主要可以完成環(huán)境變量的獲取,網(wǎng)絡(luò)登陸,驅(qū)動(dòng)器映射,快截方式創(chuàng)建,
程序加載,特殊文件夾(如系統(tǒng)文件夾)信息獲取等功能。

如果你的系統(tǒng)里支持ADO等COM部件,你同樣可以使用,
下面這個(gè)例子演示打開寫字板查看文本文件,同時(shí)創(chuàng)建一個(gè)文本文件并寫入一
段話,你可以把他拷貝到寫字板中,然后以.vbs為后綴存盤,之后雙擊他,

‘test.vbs
‘*********************
‘下面用SHELL對(duì)象啟動(dòng)程序
‘*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad " & Wscript.scriptFullName)


‘***********************************************
‘用COM對(duì)象scripting.FileSystemObject操作文本文件
‘***********************************************
Set fs = Wscript.CreateObject("scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("這是一個(gè)測(cè)試。")
a.Close

也可以在asp等web編程語(yǔ)言中應(yīng)用
<script language="VBscript.Encode" runat=server>
‘上面用SHELL對(duì)象啟動(dòng)程序
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功執(zhí)行!"
else
Response.write " 命令執(zhí)行失?。?quán)限不夠或者該程序無法在DOS狀態(tài)下運(yùn)行"
end if
</script>
注:
1.其中runat=server必須要有
2.Set WshShell = Wscript.CreateObject("Wscript.Shell")
要改為Set WshShell = server.CreateObject("Wscript.Shell"),
3.參數(shù)1代表SW_SHOWNORMAL, 激活并顯示一個(gè)窗口。若窗口是最小化或最大化,則恢復(fù)到其原來的大小和位置。
4.TRUE代表返回執(zhí)行的錯(cuò)誤,F(xiàn)alse或者為指定代表腳本繼續(xù)執(zhí)行而不等待進(jìn)程結(jié)束。
5.調(diào)用WSH的內(nèi)置對(duì)象了,可以象調(diào)用函數(shù)和過程一樣。
如call WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true)

如果你對(duì)WSH感興趣,想了解更多的話,請(qǐng)察看
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsconwshbasics.asp
http://www./club/bbs/showEssence.asp?id=11136

現(xiàn)在我們言歸正傳來看看如何對(duì)文件進(jìn)行壓縮和解壓!
大家都知道winzip對(duì)文件解壓和壓縮都易如反掌,但是如何通過程序和命令行對(duì)其調(diào)用呢?
當(dāng)然winzip的作者已經(jīng)開發(fā)出
WinZip Command Line Support Add-On Version 1.0
大家去可以去http://www./wzcline.htm 下載wzcline.exe!
前提是本機(jī)須安裝winzip8.0或更高版本的支持,如果你不是winzip8.0,去
http://www./download.htm 下載!

下載后,直接安裝就可以!
就會(huì)在winzip的目錄中產(chǎn)生winzip命令行幫助文件和程序WZZIP.exe,WZUNZIP.EXE。
你可以開始運(yùn)行里調(diào)用:
如:"c:\program files\winzip\wzzip" myfile.zip
也可以拷貝這里兩個(gè)文件到任意目錄下,直接在dos窗口下運(yùn)行
如:wzzip.exe myfile.zip
你可以在系統(tǒng)的環(huán)境變量里加入set path=c:\windows;c:\program files\winzip;
就可以在任何地方不用加入路經(jīng)調(diào)用了!

現(xiàn)在來簡(jiǎn)單的了解一下幫助中兩個(gè)命令的基本用法
壓縮文件用 WZZIP.exe :
通用格式:wzzip [options] zipfile [@listfile] [files...]
[options]包括:
-a 默認(rèn)的操作,壓縮文件
-a+ 壓縮文件,并刪除要壓縮的文件
-b[drive|path] 是在另外的驅(qū)動(dòng)器上創(chuàng)建臨時(shí)壓縮文件
-d 刪除zip文件中指定的目標(biāo)文件
-e 是設(shè)置壓縮比率,x最大,0最小
-f 替換zip文件中存在的文件
-h|-? 察看幫助
-v 創(chuàng)建一個(gè)壓縮文件的列表信息
-@list 先創(chuàng)建一個(gè)包含所有要解壓的文件的文件,然后按所包含的的文件名壓縮
...............(其他具體看幫助文件)
[@listfile] 是壓縮文件的列表信息紀(jì)錄
[files...] 則是要壓縮的多個(gè)文件,用空格隔開,也可以用通配符

例:
壓縮當(dāng)前目錄的所有文件
wzzip test.zip *.*
壓縮類型為txt的所有文件
wzzip test.zip *.txt
壓縮兩個(gè)文件
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
列出一個(gè)壓縮文件的列表內(nèi)容
wzzip -v test.zip


解壓文件用WZUNZIP.exe :
通過格式:wzunzip [options] zipfile [@listfile] [path] [files...]
[options]包括:
-c[m] 解壓是顯示文件列表在dos屏幕中
-d 重建zip文件中的目錄結(jié)構(gòu)
-f 只解壓在zip文件里同目前文件夾存在的同名的文件,如果沒有則不解壓
-jhrs 忽視zip文件里的文件的隱藏、只讀、系統(tǒng)屬性
-Jhrs 只解壓帶有隱藏、只讀、系統(tǒng)屬性的文件
-n 只解壓叫新的文件,如果要解壓的文件比已存在的新則替換。
-o 不用通過yes來確定是否要替換文件
-v 創(chuàng)建一個(gè)壓縮文件的列表信息
-@list 先創(chuàng)建一個(gè)包含所有要解壓的文件的文件,然后按所包含的的文件名解壓
...............(其他具體看幫助文件)
例如:
創(chuàng)建所有文件到當(dāng)前目錄下
wzunzip test.zip
從test.zip中創(chuàng)建abc.txt到當(dāng)前目錄下
wzunzip test.zip abc.txt
創(chuàng)建在test.zip中的目錄結(jié)構(gòu)及文件到當(dāng)前目錄下
wzunzip -d test.zip
創(chuàng)建在test.zip中的目錄結(jié)構(gòu)及文件到c:\docs下
wzunzip -d test.zip c:\docs從test.zip中創(chuàng)建包含在files.ist中的文件名的文件
wzunzip test.zip @files.lst
顯示test.zip的文件列表內(nèi)容
wzunzip -v test.zip
顯示壓縮文件中所有類型為txt的文件列表內(nèi)容
wzunzip -v test.zip *.txt
有了以上的準(zhǔn)備,那么我們現(xiàn)在來編寫VBS來執(zhí)行文件解壓和壓縮就易如反掌了:
‘test.vbs
‘*********************
‘上面用SHELL對(duì)象啟動(dòng)程序
‘*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt")


‘test.asp
‘*********************
‘上面用SHELL對(duì)象啟動(dòng)程序
‘*********************
<script language="VBscript.Encode" runat=server>
‘上面用SHELL對(duì)象啟動(dòng)程序
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run (" c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功執(zhí)行!"
else
Response.write " 命令執(zhí)行失敗!權(quán)限不夠或者該程序無法在DOS狀態(tài)下運(yùn)行"
end if
</script>



利用ASP遠(yuǎn)程注冊(cè)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")
%>





<-- ‘**************************************************************** ‘* ASP300 ‘* ‘* 版權(quán)所有: ASP300.COM 專業(yè)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("
& "REG/UNREG" & Chr(34) & ">")
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
%>

利用CDONTS發(fā)送郵件的ASP函數(shù)
<%
‘Last Updated By Recon On 05/14/2001
‘On Error Resume Next

‘利用CDONTS組件在Win2k上發(fā)送郵件

‘發(fā)送普通郵件
SendMail "admin@ny.com", "iamchn@263.net", "Normal Mail!", "Please check the attatchment!", 2, 0, "C:\Love.txt"

‘發(fā)送HTML郵件
Dim m_fso, m_tf
Dim m_strHTML

Set m_fso = Server.CreateObject("scriptING.FILESYSTEMOBJECT")
Set m_tf = m_fso.OpenTextFile("C:\Mail.htm", 1)
m_strHTML = m_tf.ReadAll

‘Write m_strHTML
Set m_tf = Nothing
Set m_fso = Nothing

SendMail "admin@ny.com", "iamchn@263.net", "HTML Mail!", m_strHTML, 2, 1, Null

‘參數(shù)說明
‘strFrom : 發(fā)件人Email
‘strTo : 收件人Email
‘strSubject : 信件主題
‘strBody : 信件正文
‘lngImportance : 信件重要性
‘ : 0 - 低重要性
‘ : 0 - 中等重要性(默認(rèn))
‘ : 0 - 高重要性
‘lngAType : 信件格式
‘ : 為1時(shí)將郵件正文作為HTML(此時(shí)可以發(fā)送HTML郵件)
‘strAttach : 附件的路徑
Sub SendMail(strFrom, strTo, strSubject, strBody, lngImportance, lngAType, strAttach)
Dim objMail

Set objMail = Server.CreateObject("CDONTS.NEWMAIL")
With objMail

.From = strFrom
.To = strTo
.Subject = strSubject
.Body = strBody
.Importance = lngImportance

If lngAType = 1 Then
.BodyFormat = 0
.MailFormat = 0
End If

If IsEmpty(strAttach) = False And IsNull(strAttach) = False Then
.AttachFile strAttach
End If

.Send
End With
Set objMail = Nothing
End Sub
%>
處理驅(qū)動(dòng)器和文件夾


使用 FileSystemObject (FSO) 對(duì)象模式,可以有計(jì)劃地處理驅(qū)動(dòng)器和文件夾,就像在 Windows 資源管理器中交互式地處理它們一樣??梢詮?fù)制和移動(dòng)文件夾,獲取有關(guān)驅(qū)動(dòng)器和文件夾的信息,等等。

獲取有關(guān)驅(qū)動(dòng)器的信息
可以用 Drive 對(duì)象來獲得有關(guān)各種驅(qū)動(dòng)器的信息,這些驅(qū)動(dòng)器是實(shí)物地或通過網(wǎng)絡(luò)連接到系統(tǒng)上的。它的屬性可以用來獲得下面的信息內(nèi)容:

驅(qū)動(dòng)器的總?cè)萘?,以字?jié)為單位(TotalSize 屬性)
驅(qū)動(dòng)器的可用空間是多少,以字節(jié)為單位(AvailableSpace 或 FreeSpace 屬性)
哪個(gè)號(hào)被賦給了該驅(qū)動(dòng)器(DriveLetter 屬性)
驅(qū)動(dòng)器的類型是什么,如可移動(dòng)的、固定的、網(wǎng)絡(luò)的、CD-ROM 或 RAM 磁盤(DriveType 屬性)
驅(qū)動(dòng)器的序列號(hào)(SerialNumber 屬性)
驅(qū)動(dòng)器使用的文件系統(tǒng)類型,如 FAT、FAT32、NTFS 等等(FileSystem 屬性)
驅(qū)動(dòng)器是否可以使用(IsReady 屬性)
共享和/或卷的名字(ShareName 和 VolumeName 屬性)
驅(qū)動(dòng)器的路徑或根文件夾(Path 和 RootFolder 屬性)
請(qǐng)考察示例代碼,來領(lǐng)會(huì)如何在 FileSystemObject 中使用這些屬性。

Drive 對(duì)象用法示例
使用 Drive 對(duì)象來收集有關(guān)驅(qū)動(dòng)器的信息。在下面的代碼中,沒有對(duì)實(shí)際的 Drive 對(duì)象的引用;相反,使用 GetDrive 方法來獲得現(xiàn)有 Drive 對(duì)象的引用(在這個(gè)例子中就是 drv)。
下面示例示范了如何在 VBscript 中使用 Drive 對(duì)象:

Sub ShowDriveInfo(drvPath)
Dim fso, drv, s
Set fso = CreateObject("scripting.FileSystemObject")
Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
s = "Drive " & UCase(drvPath) & " - "
s = s & drv.VolumeName & "
"
s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
s = s & " Kb" & "
"
s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
s = s & " Kb" & "
"
Response.Write s
End Sub

下面的代碼說明在 Jscript 中實(shí)現(xiàn)同樣的功能:
function ShowDriveInfo1(drvPath)
{
var fso, drv, s ="";
fso = new ActiveXObject("scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName(drvPath));
s += "Drive " + drvPath.toUpperCase()+ " - ";
s += drv.VolumeName + "
";
s += "Total Space: " + drv.TotalSize / 1024;
s += " Kb" + "
";
s += "Free Space: " + drv.FreeSpace / 1024;
s += " Kb" + "
";
Response.Write(s);
}
處理文件夾
在下面的表中,描述了普通的文件夾任務(wù)和執(zhí)行它們的方法。
任務(wù) 方法
創(chuàng)建文件夾。 FileSystemObject.CreateFolder
刪除文件夾。 Folder.Delete 或 FileSystemObject.DeleteFolder
移動(dòng)文件夾。 Folder.Move 或 FileSystemObject.MoveFolder
復(fù)制文件夾。 Folder.Copy 或 FileSystemObject.CopyFolder
檢索文件夾的名字。 Folder.Name
如果文件夾在驅(qū)動(dòng)器上存在,則找出它。 FileSystemObject.FolderExists
獲得現(xiàn)有 Folder 對(duì)象的實(shí)例。 FileSystemObject.GetFolder
找出文件夾的父文件夾名。 FileSystemObject.GetParentFolderName
找出系統(tǒng)文件夾的路徑。 FileSystemObject.GetSpecialFolder


請(qǐng)考察示例代碼,來看看在 FileSystemObject 中使用了多少種這些的方法和屬性。

下面的示例示范了如何在 VBscript 中使用 Folder 和 FileSystemObject 對(duì)象,來操作文件夾和獲得有關(guān)它們的信息:


Sub ShowFolderInfo()
Dim fso, fldr, s
‘ 獲得 FileSystemObject 的實(shí)例。
Set fso = CreateObject("scripting.FileSystemObject")
‘ 獲得 Drive 對(duì)象。
Set fldr = fso.GetFolder("c:")
‘ 打印父文件夾名字。
Response.Write "Parent folder name is: " & fldr & "
"
‘ 打印驅(qū)動(dòng)器名字。
Response.Write "Contained on drive " & fldr.Drive & "
"
‘ 打印根文件名。
If fldr.IsRootFolder = True Then
Response.Write "This is the root folder." & ""
"
"
Else
Response.Write "This folder isn‘t a root folder." & "

"
End If
‘ 用 FileSystemObject 對(duì)象創(chuàng)建新的文件夾。
fso.CreateFolder ("C:\Bogus")
Response.Write "Created folder C:\Bogus" & "
"
‘ 打印文件夾的基本名字。
Response.Write "Basename = " & fso.GetBaseName("c:\bogus") & "
"
‘ 刪除新創(chuàng)建的文件夾。
fso.DeleteFolder ("C:\Bogus")
Response.Write "Deleted folder C:\Bogus" & "
"
End Sub

下面的示例顯示如何在 Jscript 中使用 Folder 和 FileSystemObject 對(duì)象:
function ShowFolderInfo()
{
var fso, fldr, s = "";
// 獲得 FileSystemObject 的實(shí)例。
fso = new ActiveXObject("scripting.FileSystemObject");
// 獲得 Drive 對(duì)象。
fldr = fso.GetFolder("c:");
// 打印父文件夾名。
Response.Write("Parent folder name is: " + fldr + "
");
// 打印驅(qū)動(dòng)器名字。
Response.Write("Contained on drive " + fldr.Drive + "
");
// 打印根文件名。
if (fldr.IsRootFolder)
Response.Write("This is the root folder.");
else
Response.Write("This folder isn‘t a root folder.");
Response.Write("

");
// 用 FileSystemObject 對(duì)象創(chuàng)建新的文件夾。
fso.CreateFolder ("C:\\Bogus");
Response.Write("Created folder C:\\Bogus" + "
");
// 打印文件夾的基本名。
Response.Write("Basename = " + fso.GetBaseName("c:\\bogus") + "
");
// 刪除新創(chuàng)建的文件夾。
fso.DeleteFolder ("C:\\Bogus");
Response.Write("Deleted folder C:\\Bogus" + "
");
}
ASP分頁(yè)函數(shù)

Function ExportPageInfo(ByRef rs,curpage,i,LinkFile)
Dim retval, j, pageNumber, BasePage

retval = "第" & curpage & "頁(yè)/總" & rs.pagecount & "頁(yè) "
retval = retval & "本頁(yè)" & i & "條/總" & rs.recordcount & "條 "

If curpage = 1 Then
retval = retval & "首頁(yè) 前頁(yè) "
Else
retval = retval & "首頁(yè) 前頁(yè) "
End If
If curpage = rs.pagecount Then
retval = retval & "后頁(yè) 末頁(yè)"
Else
retval = retval & "后頁(yè) 末頁(yè)"
End if

retval = retval & "
"
BasePage = (curpage \ 10) * 10
If BasePage > 0 Then retval = retval & " <<"
For j = 1 to 10
pageNumber = BasePage + j
If PageNumber > rs.pagecount Then Exit For
If pageNumber = Cint(curpage) Then
retval = retval & " " & pageNumber & ""
Else
retval = retval & " " & pageNumber & ""
End If
Next
If rs.pagecount > BasePage Then retval = retval & " >>"

ExportPageInfo = retval
End Function

應(yīng)用

<%
adoPageRS.open "SELECT * FROM news ORDER BY addtime DESC", conn, 1, 1
if err.number <> 0 then
response.write "數(shù)據(jù)庫(kù)操作失?。?&err.description
else
if adoPageRS.eof and adoPageRS.bof then
response.write "沒有記錄"
else
%>








<%
adoPageRS.pagesize = 10
adoPageRS.absolutepage = curpage
for i = 0 to 9
%>





<%
adoPageRS.movenext
if adoPageRS.eof then
i = i + 1
exit for
End If
next
%>






asp常常用到的一些東西,
<%=Request.ServerVariables("remote_addr")%>

FOR each item in Request.form
tempvalue=trim(Request(item))
tempvalue=Replace(tempvalue,chr(13)&chr(10),"
")
tempvalue=Replace(tempvalue,"

","
")
if tempvalue="" then tempvalue=0
Execute item&"="""&tempvalue&""""
‘response.write item&"="&tempvalue&"
"
next
‘response.write request("id")
‘response.end

if ="" then
response.write "<script language=‘javascript‘>window.alert(‘‘)</script>"
response.write "<script language=‘javascript‘>window.history.go(-1);</script>"
response.end
end if

<--#include file="" -->
<--#include virtual="" -->

sql="select max(id) from pack"
set RS=conn.execute(sql)
if isnull(RS(0)) then
id=1
else
id=RS(0)+1
end if
set rs=nothing


sql="insert into pack(id,strpackdm,strusername) values("&id&",‘"&strpackdm&"‘,‘"&Session("username")&"‘)"
set RS=conn.execute(sql)


sql="update pack set "&Itemname&"=‘"&tempvalue&"‘ where id="&id&""
if Itemname<>"id" then
response.write sql&"
"
set rs=conn.execute(sql)


if err.number<>0 then
‘錯(cuò)誤處理
response.write "數(shù)據(jù)庫(kù)操作失?。? & err.description
err.clear
end if

Set rs=Nothing
Conn.close
Set conn=Nothing

do while not rs.eof and rowcount>0

rowcount=rowcount-1
rs.MoveNext

do while not rs.eof

rs.MoveNext
loop

for each item in rs2.fields
Execute item.name&"="""&trim(rs2(""&item.name&""))&""""
next


function Mycn(str)
str=lcase(str)
str=replace(str,"","")
response.write str
end function

dim conn
dim connstr
on error resume next
set conn=server.CreateObject("adodb.connection")

Connstr="driver=SQL Server; server="&servername&"; uid="&username&"; pwd="&password&"; database="&datebasename&";"

Connstr="DBQ="+server.mappath(mydbpath&mdbname)+";DRIVER={Microsoft Access Driver (*.mdb)};"

‘response.write Connstr
‘response.end
conn.Open connstr
if err<>0 then
Response.Write "無法建立到數(shù)據(jù)庫(kù)的連接!"
end if

<% Response.Buffer = True %>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    老司机精品线观看86| 一级片二级片欧美日韩| 亚洲av日韩av高潮无打码| 一区二区三区18禁看| 99久久精品一区二区国产| 国产精品一区二区视频| 五月情婷婷综合激情综合狠狠 | 国产免费一区二区不卡| 精品国产亚洲av成人一区| 亚洲精品一区二区三区日韩| 日韩精品一区二区毛片| 日本欧美一区二区三区在线播| 免费一级欧美大片免费看| 国产精品夜色一区二区三区不卡| 少妇人妻无一区二区三区| 国产成人精品久久二区二区| 日韩一区二区三区四区乱码视频| 久久香蕉综合网精品视频| 欧美午夜不卡在线观看| 国产精品熟女在线视频| 日韩夫妻午夜性生活视频| 91欧美一区二区三区| 日本在线不卡高清欧美| 日本高清不卡一二三区| 国产精品日韩欧美一区二区| 国产成人精品久久二区二区| 午夜视频成人在线观看| 亚洲综合色在线视频香蕉视频| 99久久精品免费精品国产| 九七人妻一区二区三区| 亚洲精品成人福利在线| 老司机精品一区二区三区| 日韩美成人免费在线视频| 久久久精品区二区三区| 九九热精彩视频在线免费| 亚洲一区二区三区熟女少妇| 空之色水之色在线播放| 99精品国产一区二区青青 | 老外那个很粗大做起来很爽| 91人妻人人澡人人人人精品| 人妻内射在线二区一区|