国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
asp2
詳細(xì)講解ASP腳本循環(huán)語句日期:2007-03-10
用ASP實(shí)現(xiàn)距指定日期的倒記時程序源碼日期:2007-03-10
asp之字符串操作函數(shù)日期:2007-03-08
給萬博系統(tǒng)的新聞系統(tǒng)增加分頁功能[配有詳細(xì)說明]日期:2007-03-04
講解ASP方面的知識比較全的asp學(xué)習(xí)教程日期:2007-03-04
asp,VBscript語法錯誤,史上最全最詳細(xì)最精確日期:2007-03-03
asp下同一空間多綁多哥域名的方法日期:2007-03-03
簡單的ASP分頁代碼(測試正確)日期:2007-03-03
javascript asp教程 日期相關(guān)日期:2007-03-02
javascript asp教程添加和修改日期:2007-03-02
javascript asp教程More About Recordsets日期:2007-03-02
javascript asp教程Recordset記錄日期:2007-03-02
javascript asp教程創(chuàng)建數(shù)據(jù)庫連接日期:2007-03-02
javascript asp教程錯誤處理日期:2007-03-02
javascript asp教程服務(wù)器對象日期:2007-03-02
javascript asp教程第十三課--include文件日期:2007-03-02

javascript asp教程第十二課---session對象

 
ASP常用技巧 (1)2009-08-17 13:26:47  www.hackbase.com  來源:互聯(lián)網(wǎng)
1.獲得系統(tǒng)時間: <%=now()%> 2.取得來訪用的IP: <%=request.server<I>var</I>iables("remote_host")%> 3.獲得系統(tǒng),瀏覽器版本: <<I>script</I>> window.document.write("版本:"+navigator.appName+navigat ...
1.獲得系統(tǒng)時間:
<%=now()%>
2.取得來訪用的IP:
<%=request.server<I>var</I>iables("remote_host")%>
3.獲得系統(tǒng),瀏覽器版本:
<<I>script</I>>
window.document.write("版本:"+navigator.appName+navigator.appVersion+" browser.")
</<I>script</I>>
4.去除IE混動條:
<body scroll="no"> 
<body style="overflow-y:hidden">
5.進(jìn)入網(wǎng)站,跳出廣告:
<<I>script</I> language="java<I>script</I>">
<!-- 
<!-- 注意更改文件所在路徑-->
window.open(''http://www.******.com<;I>&#</I>39;','''',''height=200,width=300,top=0,left=30'');
// -->
</<I>script</I>>
6.隨機(jī)數(shù):
<%randomize%>
<%=(int(rnd()*n)+1)%>
N為可改變數(shù)
7.向上混動代碼:
<marquee direction="up" scrolldelay="200" style="font-size: 9pt; color: #FF0000; line-height: 150%; font-style:italic; font-weight:bold" scrollamount="2" width="206" height="207" bgcolor="#FFFF00">hhhhhhhhhhhhhhhhhhh</marquee>
8.自動關(guān)閉網(wǎng)頁:
<<I>script</I> LANGUAGE="java<I>script</I>">
<!--
setTimeout(''window.close();'', 10000); //60秒后關(guān)閉
// -->
</<I>script</I>>
<p align="center">本頁10秒后自動關(guān)閉,請注意刷新頁面</p>
9.隨機(jī)背景音樂:
<%randomize%>
<bgsound src="mids/<%=(int(rnd()*60)+1)%>.mid" loop="-1"> 
可以修改數(shù)字,限制調(diào)用個數(shù),我這里是60個.
10.自動刷新本頁面:
<<I>script</I>> 
<!--  
<I>var</I> limit="0:10"  
if (document.images){ 
<I>var</I> parselimit=limit.split(":") 
parselimit=parselimit[0]*60+parselimit[1]*1 

<I>function</I> beginrefresh(){ 
if (!document.images) 
return 
if (parselimit==1) 
window.location.reload() 
else{ 
parselimit-=1 
curmin=Math.floor(parselimit/60) 
cursec=parselimit%60 
if (curmin!=0) 
curtime=curmin+"分"+cursec+"秒后重刷本頁!" 
else 
curtime=cursec+"秒后重刷本頁!" 
window.status=curtime 
setTimeout("beginrefresh()",1000) 

}  
window.<I>onload</I>=beginrefresh 
<I>file:</I>//--> 
</<I>script</I>>
11.ACCESS數(shù)據(jù)庫連接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
'更改數(shù)據(jù)庫名字
db="data/dvBBS5.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
'如果你的服務(wù)器采用較老版本Access驅(qū)動,請用下面連接方法
'connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)
conn.Open connstr
<I>function</I> CloseDatabase
Conn.close
Set conn = Nothing
End <I>function</I>
%>
12.SQL數(shù)據(jù)庫連接:
<%
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
<I>function</I> CloseDatabase
Conn.close
Set conn = Nothing
End <I>function</I>
%>
13.用鍵盤打開網(wǎng)頁代碼:
<<I>script</I> language="java<I>script</I>">
<I>function</I> ctlent(eventobject)
{
if((event.ctrlKey && window.event.keyCode==13)||(event.altKey && window.event.keyCode==83))
{
window.open('網(wǎng)址','','')
}
}
</<I>script</I>> 
這里是Ctrl+Enter和Alt+S的代碼 自己查下鍵盤的ASCII碼再換就行
14.讓層不被控件復(fù)蓋代碼:
<div z-Index:2><object ***></object></div> # 前面 
<div z-Index:1><object ***></object></div> # 后面 
<div id="Layer2" style="position:absolute; top:40;width:400px; height:95px;z-index:2"><table height=100% width=100% bgcolor="#ff0000"><tr><td height=100% width=100%></td></tr></table><<I>iframe</I> width=0 height=0></<I>iframe</I>></div>
<div id="Layer1" style="position:absolute; top:50;width:200px; height:115px;z-index:1"><<I>iframe</I> height=100% width=100%></<I>iframe</I>></div>
15.FLASH廣告代碼:
<object classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="16.VBS彈出窗口小代碼:
<<I>script</I> language=vb<I>script</I>>
msgbox"你還沒有注冊或登陸論壇","0","精品論壇"
location.href = "login.asp"
</<I>script</I>>
簡單介紹
asp是很簡單的,以至于許多的研發(fā)者不會去思考錯誤處理。錯誤處理能夠讓您的應(yīng)用程式更加合理。我看到過很多個用asp編寫的商業(yè)網(wǎng)站,大多數(shù)都忽略了錯誤處理。
錯誤的類型
有三種主要的錯誤類型:
編譯錯誤:
這種錯誤出現(xiàn)一般都是代碼的語法問題。因?yàn)榫幾g錯誤而導(dǎo)致辭asp停止運(yùn)行。
運(yùn)行錯誤
這個錯誤是發(fā)生在您準(zhǔn)備運(yùn)行asp時的。例如:假如您試圖給一個變量賦值,但是卻超出了該變量允許的范圍。
邏輯錯誤
邏輯錯誤是最難被發(fā)現(xiàn)的,這種錯誤經(jīng)常是一種結(jié)構(gòu)錯誤,電腦是發(fā)現(xiàn)不了的。這就需要我們徹頭徹尾地檢查我們的代碼。
因?yàn)榫幾g錯誤一般是和邏輯錯誤一起發(fā)生的,一般都能顯示出來,所以我們擔(dān)心的就只是運(yùn)行錯誤。他都終止asp的運(yùn)行,而且給用戶丟下一堆很不友好的文字。
那么我們要怎樣處理運(yùn)行錯誤呢???我們先來看看,asp唯一提供給我們的錯誤命令---on error resume next(這里提醒一下初學(xué)者,在asp中只有on error resume next語句,沒有on error resume goto語句)
假如您不使用on error resume next語句的話,一切運(yùn)行錯誤都會發(fā)生,這個是致命的,那么就會有一段錯誤代碼“展現(xiàn)”給用戶,而且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

當(dāng)我們在程式最上面使用on error resume next語句時,任何的錯誤都會被忽略,程式會自動執(zhí)行下一條語句。這樣程式就會完全執(zhí)行,出錯后用戶也不會看到出錯信息。但是這樣也有不好的地方,那就是假如程式?jīng)]有按照您想像的執(zhí)行的話,您就很難找到到底是哪里出了問題,所以您就得在必要的地方對錯誤進(jìn)行處理。
處理錯誤
在asp中,處理錯誤的最好的辦法就是在程式最底端放上代碼來處理錯誤。我也推薦在每個asp程式都使用緩沖區(qū)。這樣的話,假如錯誤發(fā)生,頁面就會停止,頁面內(nèi)容也會被清除,這樣用戶就不會看到錯誤信息,對您們的抱怨也就少了!下面是個例子:
<%@ language="vbscript" %>
<% 配置buffer為true
response.buffer = true
開始錯誤處理
on error resume next
%>
<% 錯誤處理
if err.number <> 0 then
清除頁面
response.clear
顯示錯誤信息給用戶
%>
<html>
<head>
<title></title>
</head>
<body bgcolor="#c0c0c0">
<font face="arial">an error occurred in the execution of this asp page<br>
please report the following information to the support desk<p>
<b>page error object</b><br>
錯誤 number: <%= err.number %><br>
錯誤信息: <%= err.description %><br>
出錯文檔: <%= err.source %><br>
出錯行: <%= err.line %><br>
</font>
</body>
</html>
<%end if%>

您們上面看到了,我首先配置on error resume next ,這樣出現(xiàn)錯誤就不會影響程式的執(zhí)行。
錯誤處理和數(shù)據(jù)庫
在錯誤處理中加入數(shù)據(jù)庫的執(zhí)行是很復(fù)雜的。假若我們有一個程式,有很多的命令去向數(shù)據(jù)庫中添加記錄,假如insert/update在程式的最底部執(zhí)行,假如我們前面又錯誤發(fā)生,那就完了!我們就會向數(shù)據(jù)庫中添加了一個錯誤的信息。因?yàn)槲覀冇昧薿n error resume next 一切的錯誤都被忽略了!即使前面出錯,程式依舊會向數(shù)據(jù)庫中添加數(shù)據(jù)的。
為避免這種情況,我們就先得做些手腳,正確處理的方法如下:
if err.number = 0 and objconnection.errors.count = 0 then
這里才能執(zhí)行語句,因?yàn)闆]有錯誤
set rstresults = dbdata.execute(txtsql)
end if
 
更多高級的處理辦法
當(dāng)一個錯誤發(fā)生時,您們也能夠顯示更多的錯誤信息。下面是同時處理數(shù)據(jù)庫和頁面錯誤的例子,有了他我們一下就能發(fā)現(xiàn)我們程式中的任何錯誤。(由于有些地方我覺得英文更能說時問題,所以沒有翻譯)。
<%
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
%>
<b>database connection object</b>
<% for intloop = 0 to objconnection.errors.count - 1 %>
error no: <%= objconnection.errors(intloop).number %><br>
description: <%= objconnection.errors(intloop).description %><br>
source: <%= objconnection.errors(intloop).source %><br>
sqlstate: <%= objconnection.errors(intloop).sqlstate %><br>
nativeerror: <%= objconnection.errors(intloop).nativeerror %><p>
<% next
end if
end if
if err.number <> 0 then
%>
<b>page error object</b><br>
error number <%= err.number %><br>
error description <%= err.description %><br>
source <%= err.source %><br>
linenumber <%= err.line %><p>
<% end if
end select
end if
%>

上面的例子讓我們一下了處理了很多在數(shù)據(jù)庫中出現(xiàn)的問題,這個在我們?nèi)粘>幊桃彩浅S玫?!我們也?yīng)該看到那個select case 語句,他能讓我們來處理特定的錯誤。
redirect 和錯誤處理
有一點(diǎn)我們就當(dāng)注意一下,就是我們常用到的redirect對象,假如一個頁面中出現(xiàn)了redirect對象,那么錯誤處理就失去了意義。所以在轉(zhuǎn)向之前我們還得處理一下,如下:
if err.number = 0 and objconnection.errors.count = 0 then

response.clear
response.redirect ?lt;url here>?
end if
 
把代碼變得更整齊
為了讓代碼變得更整齊,首先把錯誤處理的文檔放在一個包含文檔中。這樣您就能夠在任何文檔中使用他。這樣修改也方便。
在您程式的最上方加入(當(dāng)然在語言聲明之后)on error resume next語句。
在您執(zhí)行sql以前進(jìn)行錯誤檢查。
使用redirect以前也要進(jìn)行錯誤處理。
讓您處理錯誤的包含文檔在代碼的最上面

ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件
MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)-->sql語句出錯(數(shù)據(jù)類型不匹配或表名(字段名)錯誤或表處于編輯狀態(tài),或表不存在于conn打開的數(shù)據(jù)庫中)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E14)-->sql語句出錯(字段名錯誤,或數(shù)據(jù)類型不匹配)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E07)-->sql語句出錯(要插入或更新的字段的類型與變量數(shù)據(jù)類型不匹配)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E57)-->sql語句出錯(要插入或更新的數(shù)據(jù)溢出)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E10)-->sql語句出錯(update字段名或要更新的數(shù)據(jù)類型錯誤)
MicrosoftOLEDBProviderforODBCDrivers(0x80004005)-->sql語句出錯(要插入或更新的字段的數(shù)值不能為空值)
MicrosoftOLEDBProviderforODBCDrivers(0x80004005) -->打開數(shù)據(jù)庫出錯,沒有在指定目錄發(fā)現(xiàn)數(shù)據(jù)庫
MicrosoftOLEDBProviderforODBCDrivers(0x80040E37)-->沒有發(fā)現(xiàn)表
MicrosoftVBscript運(yùn)行時錯誤(0x800A000D)-->錯誤引用rs變量(rs對像已關(guān)閉或未定義)
MicrosoftVBscript運(yùn)行時錯誤(0x800A01C2)-->vbscript腳本錯誤(vbscript語句出錯)
MicrosoftVBscript運(yùn)行時錯誤(0x800A0006)-->vbscript腳本錯誤(溢出錯誤)
MicrosoftVBscript編譯器錯誤(0x800A040E)-->缺少loop
MicrosoftVBscript編譯器錯誤(0x800A03EA)-->缺少if或endif
MicrosoftVBscript編譯器錯誤(0x800A03EE)--> 語句未結(jié)束(缺少")")
MicrosoftVBscript編譯器錯誤(0x800A03F6)-->if語句出錯(缺少endif)
MicrosoftVBscript運(yùn)行時錯誤(0x800A005B)-->缺少set
MicrosoftVBscript運(yùn)行時錯誤(0x800A0005)-->變量未定義
MicrosoftVBscript編譯器錯誤(0x800A03F9)-->if語句缺少then
MicrosoftVBscript編譯器錯誤(0x800A0411)-->dim語句定義錯誤
MicrosoftVBscript編譯器錯誤(0x800A0408)-->sql語句錯誤(?????????????????)
Microsoft VBScript 運(yùn)行時錯誤 (0x800A01B6)錯誤原因:set rs=server.create......你少了 set
ADODB.Recordset(0x800A0BB9)-->sql語句出錯(sql語句或conn語句未定義或?qū)σ粋€rs屬性進(jìn)行賦值時發(fā)生錯誤)
ADODB.Recordset(0x800A0CC1)-->rs對像出錯(rs對像本身不存在或錯誤地引用了一個不存在的字段名)
ADODB.Recordset(0x800A0BCD)-->rs對像出錯(記錄集中沒有記錄卻對記錄集進(jìn)行操作)
ADODB.Recordset(0x800A0E78)-->rs對像出錯(記錄集不存在,缺少rs.open語句)
ADODB.Recordset(0x800A0CC1) -->rs對像出錯(引用了一個不存在的字段名)
ADODB.Recordset(0x800A0E7D)-->conn定義錯誤
ADODB.Recordset(0x800A0CB3)-->數(shù)據(jù)庫以只讀方式打開,無法更新數(shù)據(jù)
如果 VBScript 語句結(jié)構(gòu)違反了一個或多個 VBScript 腳本語言語法規(guī)則,就會產(chǎn)生 VBScript 語法錯誤。
錯誤通常在執(zhí)行程序前,編譯程序時產(chǎn)生。 以下是53個語法錯誤:
錯誤編號 描述
十進(jìn)制 十六進(jìn)制 說明
1001 800A03E9 內(nèi)存不足
1002 800A03EA 語法錯誤
1003 800A03EB 缺少“:”
1005 800A03ED 需要 '('
1006 800A03EE 需要 ')'
1007 800A03EF 缺少“]”
1010 800A03F2 需要標(biāo)識符
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 需要表達(dá)式
1024 800A0400 需要語句
1025 800A0401 需要語句的結(jié)束
1026 800A0402 需要整數(shù)常數(shù)
1027 800A0403 需要 'While' 或 'Until'
1028 800A0404 需要 'While,'、 'Until,' 或語句未結(jié)束
1029 800A0405 需要 'With'
1030 800A0406 標(biāo)識符太長
1031 800A0407 無效的數(shù)
1032 800A0408 無效的字符
1033 800A0409 未結(jié)束的串常量
1034 800A040A 未結(jié)束的注釋
1037 800A040D 無效使用關(guān)鍵字 'Me'
1038 800A040E 'loop' 沒有 'do'
1039 800A040F 無效 'exit' 語句
1040 800A0410 無效 'for' 循環(huán)控制變量
1041 800A0411 名稱重定義
1042 800A0412 必須為行的第一個語句
1043 800A0413 不能賦給非Byval參數(shù)
1044 800A0414 調(diào)用 Sub 時不能使用圓括號
1045 800A0415 需要文字常數(shù)
1046 800A0416 需要 'In'
1047 800A0417 需要 'Class'
1048 800A0418 必須在一個類的內(nèi)部定義
1049 800A0419 在屬性聲明中需要 Let , Set 或 Get
1050 800A041A 需要 'Property'
1051 800A041B 參數(shù)數(shù)目必須與屬性說明一致
1052 800A041C 在類中不能有多個缺省的屬性/方法
1053 800A041D 類初始化或終止不能帶參數(shù)
1054 800A041E Property Let 或 Set 至少應(yīng)該有一個參數(shù)
1055 800A041F 不需要的 'Next'
1056 800A0420 只能在 ‘Property’ 或 ’Function’ 或 ’Sub’ 上指定 ’Default’
1057 800A0421 說明 'Default' 必須同時說明 'Public' "
1058 800A0422 只能在 Property Get 中指定 'Default'
VBScript 運(yùn)行時錯誤
如果 VBScript 腳本執(zhí)行系統(tǒng)無法實(shí)施的操作,則會產(chǎn)生 VBScript 運(yùn)行時錯誤。只有在運(yùn)行腳本、為變量表達(dá)式賦值或
分配內(nèi)存時,才會產(chǎn)生 VBScript 運(yùn)行時錯誤。 以下是65個運(yùn)行時錯誤:
錯誤編號 描述
十進(jìn)制 十六進(jìn)制 說明
5 800A0005 無效過程調(diào)用或參數(shù)
6 800A0006 溢出
7 800A0007 內(nèi)存不足
9 800A0009 下標(biāo)越界
10 800A000A 該數(shù)組為定長的或臨時被鎖定
11 800A000B 被零除
13 800A000D 類型不匹配
14 800A000E 字符串空間溢出
17 800A0011 無法
執(zhí)行請求的操作
28 800A001C 堆棧溢出
35 800A0023 未定義 Sub 或 Function
48 800A0030 加載 DLL 錯誤
51 800A0033 內(nèi)部錯誤
52 800A0034 壞文件名或數(shù)
53 800A0035 文件未找到
54 800A0036 壞文件模式
55 800A0037 文件已經(jīng)打開
57 800A0039 設(shè)備I/O錯誤
58 800A003A 文件已經(jīng)存在
61 800A003D 磁盤空間已滿
62 800A003E 輸入超出文件尾
67 800A0043 文件太多
68 800A0044 設(shè)備不可用
70 800A0046 權(quán)限禁用
71 800A0047 磁盤未準(zhǔn)備好
74 800A004A 不能用不同的驅(qū)動器重新命名
75 800A004B 路徑/文件訪問錯誤
76 800A004C 路徑未找到
91 800A005B 未設(shè)置對象變量
92 800A005C For 循環(huán)未初始化
94 800A005E 非法使用 Null
322 800A0142 不能建立所需臨時文件
424 800A01A8 需要對象
429 800A01AD ActiveX 部件無法創(chuàng)建對象
430 800A01AE 類不支持自動化
432 800A01B0 在自動化操作中未找到文件名或類名
438 800A01B6 對象不支持該屬性或方法
440 800A01B8 Automation錯誤
445 800A01BD 對象不支持此操作
446 800A01BE 對象不支持指定的參數(shù)
447 800A01BF 對象不支持當(dāng)前的區(qū)域設(shè)置
448 800A01C0 未找到命名參數(shù)
449 800A01C1 參數(shù)不可選
450 800A01C2 錯誤的參數(shù)個數(shù)或無效的參數(shù)屬性值
451 800A01C3 對象不是一個集合
453 800A01C5 指定的dll函數(shù)未找到
455 800A01C7 代碼源鎖錯誤
457 800A01C9 這個鍵已經(jīng)是本集合的一個元素關(guān)聯(lián)
458 800A01CA 變量使用了一個 VBScript 中不支持的自動化(Automation)類型
462 800A01CE 遠(yuǎn)程服務(wù)器不存在或不能訪問
481 800A01E1 無效圖片
500 800A01F4 變量未定義
501 800A01F5 違法的分配
502 800A01F6 腳本對象不安全
503 800A01F7 對象不能安全初始化
504 800A01F8 對象不能安全創(chuàng)建
505 800A01F9 無效的或不合格的引用
506 800A01FA 類未被定義
507 800A01FB 發(fā)生異常
5016 800A1398 需要正則表達(dá)式對象
5017 800A1399 正則表達(dá)式中的語法錯誤
5018 800A139A 錯誤的數(shù)量詞
5019 800A139B 在正則表達(dá)式中需要 ']'
5020 800A139C 在正則表達(dá)式中需要 ')'
5021 800A139D 字符集越界
32811 800A802B 元素未找到
Request對象功能是從客戶端得到數(shù)據(jù),常用的三種取得數(shù)據(jù)的方法是:Request.Form、Request.QueryString,Request。其第三種是前兩種的一個縮寫,可以取代前兩種情況。而前兩種主要對應(yīng)的Form提交時的兩種不同的提交方法:分別是Post方法和Get方法。
        Request 對象的屬性和方法比較多,常用的幾個為:UserAgent 傳回客戶端瀏覽器的版本信息,UserHostAddress 傳回遠(yuǎn)方客戶端機(jī)器的主機(jī)IP 地址,UserHostName 傳回遠(yuǎn)方客戶端機(jī)器的DNS 名稱,PhysicalApplicationPath 傳回目前請求網(wǎng)頁在Server 端的真實(shí)路徑。
從瀏覽器獲取數(shù)據(jù)
        利用Request方法,可以讀取其他頁面提交過來的數(shù)據(jù)。提交的數(shù)據(jù)有兩種形式:一種是通過Form表單提交過來,另一種是通過超級鏈接后面的參數(shù)提交過來,兩種方式都可以利用Request對象讀取。

<%@ Page Language="C#"%>
<%
    string strUserName = Request["Name"];
    string strUserLove = Request["Love"];
%>
姓名:<%=strUserName%>
愛好:<%=strUserLove%>
<form action="" method="post">
<P>姓名:<input type="TEXT" size="20" name="Name"></P>
<P>興趣:<input type="TEXT" size="20" name="Love"></P>
<P><input type="submit" value="提 交"></P>
</form>
得到客戶端的信息
        利用Request對象內(nèi)置的屬性,可以得到一些客戶端的信息,比如客戶端瀏覽器版本和客戶端地址等等
<%@ Page Language="C#"%>
客戶端瀏覽器:<%=Request.UserAgent %>
客戶端IP地址:<%=Request.UserHostAddress %>
當(dāng)前文件服務(wù)端物理路徑:<%=Request.PhysicalApplicationPath %>
Request 對象的屬性
  UserLanguages 客戶端主機(jī)所使用的語言
  UserHostName 客戶端主機(jī)的DNS名稱
  userHostArrress 客戶端主機(jī)的IP地址
  UserAgent 客戶端瀏覽器版本
  Url 當(dāng)前要求的URL
  TotalBytes 當(dāng)前輸入的容量大小
  ServerVariables 網(wǎng)頁的Server變量
  RequestType 客戶端網(wǎng)頁的傳送方式(Get/Post)
  RawUrl 當(dāng)前頁面的U『RL
  QueryString 瀏覽器地址欄后的參數(shù)
  PhysicalPath 當(dāng)前網(wǎng)頁在服務(wù)器端的實(shí)際路徑
  PhysicalApplicationPath 當(dāng)前在服務(wù)器端執(zhí)行的程序的實(shí)際路徑
  Pathq 當(dāng)前網(wǎng)頁的相對地址
  Params 返回QueryString、Form、Cookies、ServerVariables的全部集合      
   IsSecureConnection 目前聯(lián)機(jī)的安全性
  IsAuthenticated 目前聯(lián)機(jī)是否有效
  HttpMethod 目前客戶端網(wǎng)頁的傳送方式(Get/Post)
  Headers 網(wǎng)頁的標(biāo)題集合
  Form 窗體變量
  Files 客戶端上傳的文件
  FilePath 當(dāng)前執(zhí)行網(wǎng)頁的相對地址
  Cookies HttpCookieCollection對象集合
  ContentType 當(dāng)前需求的MIME內(nèi)容類型
  ContentEncoding 客戶端瀏覽器的字符設(shè)置 -
  ConnectionlD 客戶端所提出的網(wǎng)頁瀏覽請求的聯(lián)機(jī)的ID
  ClientCertificate 客戶端安全認(rèn)證信息
  Browser 客戶端瀏覽器的信息
  AnnlicationPath 當(dāng)前運(yùn)行程序的服務(wù)器端虛擬目錄
-ASP重點(diǎn)整理 ASP重點(diǎn)整理
HTML語言重點(diǎn) HTML語言重點(diǎn)
<!-- 這是註解 --> <!-- 這是注解 -->       HTML 語言中的註解 HTML 語言中的注解
傳送資料至 ASP 傳送資料至 ASP
<form action= 接收檔 .asp metcho=post> <form action= 接收檔 .asp metcho=post>               輸入資料傳送至 ASP 檔案帳號: <input type=text name=name size=20><p> 輸入資料傳送至 ASP 檔案賬號: <input type=text name=name size=20><p>      文字輸入?yún)^(qū)塊 文字輸入?yún)^(qū)塊
密碼: <input type=password name=pws size=10><p> 密碼: <input type=password name=pws size=10><p>   密碼輸入?yún)^(qū)塊 密碼輸入?yún)^(qū)塊
<input type=submit value=” 確定 ”> <input type=submit value=” 確定 ”>                    傳送資料按鈕 傳送資料按鈕
</form> </form>
response.redirect “example.asp” à 將網(wǎng)頁轉(zhuǎn)向到其它的網(wǎng)址 response.redirect “example.asp” à 將網(wǎng)頁轉(zhuǎn)向到其它的網(wǎng)址
response.write “<a href=menu.asp?name=” 資料 ”&email=” 資料 ”> 進(jìn)入 ” à 傳資料至 menu.asp response.write “<a href=menu.asp?name=” 資料 ”&email=” 資料 ”> 進(jìn)入 ” à 傳資料至 menu.asp
接收 ASP 傳來的資料 接收 ASP 傳來的資料
<!--#include virtual=”/lib.inc”--> <!--#include virtual=”/lib.inc”-->   插入存放在 Web 伺服器主目錄的 lib.inc 函式檔 插入存放在 Web 伺服器主目錄的 lib.inc 函式檔
<!--#include file=”lib.inc”--> <!--#include file=”lib.inc”-->   將同一個子目錄的 lib.inc 檔案插入 將同一個子目錄的 lib.inc 檔案插入
name=request(“name”) , pws=request(“pws”) name=request(“name”) , pws=request(“pws”)   取得傳遞的內(nèi)容 取得傳遞的內(nèi)容
Session(“username”)=” 陳小明 ” à 建立 Session 物件 Session(“username”)=” 陳小明 ” à 建立 Session 物件
Session.Abandon à 結(jié)束 Session ,也就是登出網(wǎng)站。 Session.Abandon à 結(jié)束 Session ,也就是登出網(wǎng)站。
開啟資料庫檔案 開啟資料庫檔案
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 à 執(zhí)行新增記錄的 SQL 指令 addsql à 執(zhí)行新增記錄的 SQL 指令
rs1.close  關(guān)閉資料庫的連接,set rs1=nothing  釋放rs1物件所佔(zhàn)用的空間 rs1.close關(guān)閉資料庫的連接,set rs1=nothing釋放rs1物件所占用的空間
conn.close 關(guān)閉資料庫連接,set conn=nothing 釋放conn物件所佔(zhàn)用的空間 conn.close關(guān)閉資料庫連接,set conn=nothing釋放conn物件所占用的空間
資料庫的記錄處理 資料庫的記錄處理
rs.BOF à 第一筆記錄之前, rs.EOF à 最後一筆記錄之後 rs.BOF à 第一筆記錄之前, rs.EOF à 最后一筆記錄之后
rs.AbsolutePosition=N à 目前指標(biāo)的位置,如為負(fù)數(shù)表示為 BOF 或 EOF rs.AbsolutePosition=N à 目前指標(biāo)的位置,如為負(fù)數(shù)表示為 BOF 或 EOF
rs.RecordCount à 記錄的總筆數(shù) rs.RecordCount à 記錄的總筆數(shù)
rs.pagesize=10 à 設(shè)每頁 10 筆, rs.absolutepage à 目前所在頁, rs.pagecount à 總頁數(shù) rs.pagesize=10 à 設(shè)每頁 10 筆, rs.absolutepage à 目前所在頁, rs.pagecount à 總頁數(shù)
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 à 關(guān)閉 RecordSet 物件 rs.close à 關(guān)閉 RecordSet 物件
其它重點(diǎn) 其它重點(diǎn)
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=數(shù)字,用來設(shè)定網(wǎng)頁保留在客戶端瀏覽器Cache的時間長度,以分鐘為單位,0表不保留 response.expires=數(shù)字,用來設(shè)定網(wǎng)頁保留在客戶端瀏覽器Cache的時間長度,以分鐘為單位,0表不保留
response.redirect "網(wǎng)址",連結(jié)至其它網(wǎng)頁 response.redirect "網(wǎng)址",連結(jié)至其它網(wǎng)頁
response.write "字串",顯示某一段字串訊息,總長度不可超過1022個字元 response.write "字串",顯示某一段字串訊息,總長度不可超過1022個字元
request.form("表單欄位名稱"),取得表單的某一欄位值,限用POST方法 request.form("表單欄位名稱"),取得表單的某一欄位值,限用POST方法
request.querystring("變數(shù)名稱"),取得URL之?字元符號之後的文字 request.querystring("變數(shù)名稱"),取得URL之?字元符號之后的文字

1.記錄集關(guān)閉之前再次打開:
------------------------------------
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之前先關(guān)閉 rs.close

set rs1=server.createobject
rs1.open sql,conn,1,1
2,用SQL關(guān)鍵字做表名或字段名
-------------------------------------
sql="select * from user"
rs.open sql,conn,1,1
-------------------------------------
user為sql關(guān)鍵字
解決:改為
sql="select * from [user]"

3,用鎖定方式去進(jìn)行update
-------------------------------------
sql="select * from [user]"
rs.open sql,conn,1,1
rs.addnew

rs("userName")="aa"
rs.update
-------------------------------------
當(dāng)前記錄集的打開方式為只讀
解決:
改為
rs.open sql,conn,1,3
4,在查詢語句中采用的對比字段值與字段類型不符
-----------------------------------------
sql="select * from [user] where id='" & myID & "'"
rs.open sql,conn,1,1
-----------------------------------------
假設(shè)表中設(shè)計ID為數(shù)字型,那么些時出錯。
解決:
sql="select * from [user] where id=" & myID
5,未檢查變量值而出錯
-----------------------------------------
sql="select * from [user] where id=" & myID
rs.open sql,conn,1,1
-----------------------------------------
假設(shè)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
-----------------------------------------
假設(shè)id為數(shù)字型,myID變量此時值不為null,但為字符,比如myID此時為"aa"
那么sql將成為
sql="select * from [user] where id=aa"
解決:
在前面加上
if isnumeric(myID)=false then 出錯提示
這也可以有效防止 sql injection 漏洞攻擊。
7,由于數(shù)據(jù)庫文件所在目錄的NTFS權(quán)限而引起的'不能更新。數(shù)據(jù)庫或?qū)ο鬄橹蛔x"錯誤。
說明:
WIN2K系統(tǒng)延續(xù)了WINNT系統(tǒng)的NTFS權(quán)限。
對于系統(tǒng)中的文夾都有默認(rèn)的安全設(shè)置。
而通過HTTP對WWW訪問時的系統(tǒng)默認(rèn)用戶是 iusr_計算機(jī)名 用戶 ,它屬于guest組。
當(dāng)通過HTTP訪問時,可以ASP或JSP,也或是PHP或.NET程序?qū)?shù)據(jù)進(jìn)行修改操作:
比如:
當(dāng)打開某一個文章時,程序設(shè)定,文章的閱讀次數(shù)=原閱讀次數(shù)+1
執(zhí)行
conn.execute("update arts set clicks=clicks+1 where id=n")
語句時,如果 iusr_計算機(jī)名 用戶沒有對數(shù)據(jù)庫的寫權(quán)限時,就會出錯.
解決方法:
找到數(shù)據(jù)庫所在目錄
右鍵》屬性》安全選項(xiàng)卡》設(shè)置 iusr_計算機(jī)名 用戶的寫權(quán)限(當(dāng)然,也可以是everyone

   歡迎光臨!今天是2010年10月27日 星期三
 
 首頁 基礎(chǔ)教程  留言薄制作  神奇FSO  ASP優(yōu)化  ASP實(shí)例  SQL語法  VB教程  安全手冊  綜合技巧  案頭必備  留言  
  案頭必備 
 
·ASP中時間函數(shù)的使用-1
·ASP中時間函數(shù)的使用-2
·ASP中時間函數(shù)的使用-3
·ASP編程中20個非常有用的..
·ASP提速技巧
·ASP函數(shù)大全-1
·ASP函數(shù)大全-2
·ASP函數(shù)大全-3
·ASP函數(shù)大全-4
·ASP初學(xué)者常犯的幾個錯誤
·asp函數(shù)大全
·用ASP與ADO查詢Web數(shù)..
·用ASP訪問數(shù)據(jù)庫的幾種常見..
·ASP中Cookie使用指南
·最大限度優(yōu)化你的Asp性能
·使用ASP常見問題解答
 
  ■ 案頭必備 > ASP編程中20個非常有用的例子
如果內(nèi)容很多,請先在本機(jī)編輯好,以免session過期導(dǎo)致內(nèi)容丟失。ASP 編程中 20 個非常有用的例子

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.如何計算每天的平均反復(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.如何回到先前的頁面
答:< 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.如何鏈結(jié)到一副圖片上
答:< % @Languages=vbscript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >
8.強(qiáng)迫輸入密碼對話框
答:把這句話放載頁面的開頭
< % 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 程序內(nèi)使用 msgbox,程序出錯說沒有權(quán)限
答:由于 asp 是服務(wù)器運(yùn)行的,如果可以在服務(wù)器顯示一個對話框,那么你只好等有人按了確定之后,你的程序才能繼續(xù)執(zhí)行,而一般服務(wù)器不會有人守著,所以微軟不得不禁止這個函數(shù),并胡亂告訴你 (:) 呵呵) 沒有權(quán)限。但是ASP和客戶端腳本結(jié)合倒可以顯示一個對話框,as follows:
< % yourVar="測試對話框"% >
< % script language='javascript' >
alert("< %=yourvar% >")
< /script >
11.有沒有辦法保護(hù)自己的源代碼,不給人看到
答:可以去下載一個微軟的Windows Script Encoder,它可以對asp的腳本和客戶端javascript/vbscript腳本進(jìn)行加密。。。不過客戶端加密后,只有ie5才能執(zhí)行,服務(wù)器端腳本加密后,只有服務(wù)器上安裝有script engine 5(裝一個ie5就有了)才能執(zhí)行。
12.怎樣才能將 query string 從一個 asp 文件傳送到另一個?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))
13.global.asa文件總是不起作用?
答:只有web目錄設(shè)置為web application, global.asa才有效,并且一個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 全部確定即可。但是值得注意的是這樣對htm也要由asp.dll處理,效率將降低。
15.如何注冊組件
答:有兩種方法。
第一種方法:手工注冊 DLL 這種方法從IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下來執(zhí)行,進(jìn)入到包含有DLL的目錄,并輸入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它會把dll的特定信息注冊入服務(wù)器中的注冊表中。然后這個組件就可以在服務(wù)器上使用了,但是這個方法有一個缺陷。當(dāng)使用這種方法注冊完畢組件后,該組件必須要相應(yīng)的設(shè)置NT的匿名賬號有權(quán)限執(zhí)行這個dll。特別是一些組件需要讀取注冊表,所以,這個注冊組件的方法僅僅是使用在服務(wù)器上沒有MTS的情況下,要取消注冊這個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上注冊組件的步驟如下:
1) 打開IIS管理控制臺。
2) 展開transaction server,右鍵單擊"pkgs installed"然后選擇"new package"。
3) 單擊"create an empty package"。
4) 給該包命名。
5) 指定administrator賬號或則使用"interactive"(如果服務(wù)器經(jīng)常是使用administrator 登陸的話)。
6) 現(xiàn)在使用右鍵單擊你剛建立的那個包下面展開后的"components"。選擇 "new then component"。
7) 選擇 "install new component" 。
8) 找到你的.dll文件然后選擇next到完成。
要刪除這個對象,只要選擇它的圖標(biāo),然后選擇delete。
附注:特別要注意第二種方法,它是用來調(diào)試自己編寫組件的最好方法,而不必每次都需要重新啟動機(jī)器了。
16. ASP與Access數(shù)據(jù)庫連接:
<%@ language=VBscript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=數(shù)據(jù)庫密碼;dbq="&mdbfile
%>
17. ASP與SQL數(shù)據(jù)庫連接:
<%@ language=VBscript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
建立記錄集對象:
set rs=server.createobject("adodb.recordset")
rs.open SQL語句,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)計函數(shù):
AVG(字段名) 得出一個表格欄平均值
COUNT(*|字段名) 對數(shù)據(jù)行數(shù)的統(tǒng)計或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql="select sum(字段名) as 別名 from 數(shù)據(jù)表 where 條件表達(dá)式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統(tǒng)的計值,其它函數(shù)運(yùn)用同上。
(5) 數(shù)據(jù)表的建立和刪除:
CREATE TABLE 數(shù)據(jù)表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數(shù)據(jù)表名稱 (永久性刪除一個數(shù)據(jù)表)
19. 記錄集對象的方法:
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頁的第一行
rs.pagesize=N 設(shè)置每頁為N條記錄
rs.pagecount 根據(jù) pagesize 的設(shè)置返回總頁數(shù)
rs.recordcount 返回記錄總數(shù)
rs.bof 返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.delete 刪除當(dāng)前記錄,但記錄指針不會向下移動
rs.addnew 添加記錄到數(shù)據(jù)表末端
rs.update 更新數(shù)據(jù)表記錄
---------------------------------------
20 Recordset對象方法
Open方法
recordset.Open Source,ActiveConnection,CursorType,LockType,Options
Source
Recordset對象可以通過Source屬性來連接Command對象。Source參數(shù)可以是一個Command對象名稱、一段SQL命令、一個指定的數(shù)據(jù)表名稱或是一個Stored Procedure。假如省略這個參數(shù),系統(tǒng)則采用Recordset對象的Source屬性。
ActiveConnection
Recordset對象可以通過ActiveConnection屬性來連接Connection對象。這里的ActiveConnection可以是一個Connection對象或是一串包含數(shù)據(jù)庫連接信息(ConnectionString)的字符串參數(shù)。
CursorType
Recordset對象Open方法的CursorType參數(shù)表示將以什么樣的游標(biāo)類型啟動數(shù)據(jù),包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常數(shù) 常數(shù)值 說明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,啟動一個只能向前移動的游標(biāo)(Forward Only)。
adOpenKeyset 1 啟動一個Keyset類型的游標(biāo)。
adOpenDynamic 2 啟動一個Dynamic類型的游標(biāo)。
adOpenStatic 3 啟動一個Static類型的游標(biāo)。
-------------------------------------------------------------
以上幾個游標(biāo)類型將直接影響到Recordset對象所有的屬性和方法,以下列表說明他們之間的區(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ù)庫。
LockType
Recordset對象Open方法的LockType參數(shù)表示要采用的Lock類型,如果忽略這個參數(shù),那么系統(tǒng)會以Recordset對象的LockType屬性為預(yù)設(shè)值。LockType參數(shù)包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
-------------------------------------------------------------
常數(shù) 常數(shù)值 說明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset對象以只讀方式啟動,無法運(yùn)行AddNew、Update及Delete等方法
adLockPrssimistic 2 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)會暫時鎖住其他用戶的動作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic 3 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)并不會鎖住其他用戶的動作,其他用戶可以對數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic 4 當(dāng)數(shù)據(jù)源正在更新時,其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對數(shù)據(jù)進(jìn)行增、
刪、改的操作。
 
■今日推薦:用ASP與ADO查詢Web數(shù)據(jù)庫 
 
 
 
顯示頁面加載時間
重復(fù)域中的斑馬線
顯示字符串前20個字符并在結(jié)尾處添加“……”
如果動態(tài)圖片為空,使用默認(rèn)圖片代替
如果數(shù)據(jù)為空,使用默認(rèn)提示信息代替
●顯示頁面加載時間
頁面頂部添加下面的代碼:
<%
Dim strStartTime
Dim strEndTime
strStartTime = Timer '開始時間
%>
頁面(同一頁)的末尾添加:
<%
' 加載完畢的時間
strEndTime = Timer
Response.Write ("頁面加載時間: ")
Response.Write FormatNumber(strEndTime - strStartTime, 4)
Response.Write (" 秒.")
%>
 
●重復(fù)域中的斑馬線
<%
'此模塊放置在重復(fù)域之外
Dim RecordCounter
Recordcounter = 0
%>
<tr class =
<%
'將重復(fù)域中第一個 <tr>標(biāo)簽的CLASS屬性代碼用本模塊替換
'本模塊基于CSS來改變單元格背景色,你也可以直接設(shè)置背景色來實(shí)現(xiàn)斑馬線
RecordCounter = Recordcounter + 1
If RecordCounter Mod 2 = 1 Then
Response.Write "altRow1"
Else
Response.write "altRow2"
End If
%>
 
●顯示字符串前20個字符并在結(jié)尾處添加“……”
<%
Dim CutShort
CutShort = rsYourRecordset.Fields.Item("YourField").Value
Response.Write LEFT (CutShort, 20) & "........"
%>
 
●如果動態(tài)圖片為空,用默認(rèn)圖片代替
<%
Dim PicShow
PicShow = rsShowHide.Fields.Item("shMainPix").Value
IF PicShow <>"" THEN %>
<img src="<%=rsShowHide.Fields.Item("shMainPix").Value%>">
<% ELSE %>
<img src="StaticPic.gif">
<% End If %>
 
●如果數(shù)據(jù)為空,用默認(rèn)提示信息代替。
<%
Dim strShowHide
strShowHide = rsYourRecordset.Fields.Item("YourDataField").Value
IF stShowHide <>"" THEN%>
數(shù)據(jù)為空
<%END IF%>

純編碼實(shí)現(xiàn)Access數(shù)據(jù)庫的建立或壓縮
<%
'#######以下是一個類文件,下面的注解是調(diào)用類的方法################################################
'# 注意:如果系統(tǒng)不支持建立Scripting.FileSystemObject對象,那么數(shù)據(jù)庫壓縮功能將無法使用
'# Access 數(shù)據(jù)庫類
'# CreateDbFile 建立一個Access 數(shù)據(jù)庫文件
'# CompactDatabase 壓縮一個Access 數(shù)據(jù)庫文件
'# 建立對象方法:
'# Set a = New DatabaseTools
'# by (蕭寒雪) s.f.
'#########################################################################################
Class DatabaseTools
Public function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)
'建立數(shù)據(jù)庫文件
'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 ("對不起,該數(shù)據(jù)庫已經(jīng)存在!")
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)
'壓縮數(shù)據(jù)庫文件
'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 ("對不起,該數(shù)據(jù)庫已經(jīng)存在!")
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
'刪除舊的數(shù)據(jù)庫文件
call DeleteFile(SavePath & dbFileName)
'將壓縮后的數(shù)據(jù)庫文件還原
call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName)
Set Cd = False
CompactDatabase = True
End If
end function
Public function DbExists(byVal dbPath)
'查找數(shù)據(jù)庫文件是否存在
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)
'刪除一個文件
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Err.number<>0 Then
Response.Write("刪除文件發(fā)生錯誤!請查看錯誤信息
" & 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("修改文件名時發(fā)生錯誤!請查看錯誤信息
" & 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ù)庫,代碼如下,但是壓縮之后的數(shù)據(jù)庫密碼就沒有了!如何解決?
<%
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ù)庫, " & dbpath & ", 已經(jīng)壓縮成功!" & vbCrLf
Else
CompactDB = "數(shù)據(jù)庫名稱或路徑不正確. 請重試!" & 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.如何計算每天的平均反復(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.如何回到先前的頁面
答:< 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.如何鏈結(jié)到一副圖片上
答:< % @Languages=vbs cript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >
8.強(qiáng)迫輸入密碼對話框
答:把這句話放載頁面的開頭
< % 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 程序內(nèi)使用 msgbox,程序出錯說沒有權(quán)限
答:由于 asp 是服務(wù)器運(yùn)行的,如果可以在服務(wù)器顯示一個對話框,那么你只好等有人按了確定之后,你的程序才能繼續(xù)執(zhí)行,而一般服務(wù)器不會有人守著,所以微軟不得不禁止這個函數(shù),并胡亂告訴你 ( 呵呵) 沒有權(quán)限。但是ASP和客戶端腳本結(jié)合倒可以顯示一個對話框,as follows:
< % yourVar="測試對話框"% >
< % s cript language='javas cript' >
alert("< %=yourvar% >")
< /s cript >
11.有沒有辦法保護(hù)自己的源代碼,不給人看到
答:可以去下載一個微軟的Windows s cript Encoder,它可以對asp的腳本和客戶端javas cript/vbs cript腳本進(jìn)行加密。。。不過客戶端加密后,只有ie5才能執(zhí)行,服務(wù)器端腳本加密后,只有服務(wù)器上安裝有s cript engine 5(裝一個ie5就有了)才能執(zhí)行。
12.怎樣才能將 query string 從一個 asp 文件傳送到另一個?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))
13.global.asa文件總是不起作用?
答:只有web目錄設(shè)置為web application, global.asa才有效,并且一個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 全部確定即可。但是值得注意的是這樣對htm也要由asp.dll處理,效率將降低。
15.如何注冊組件
答:有兩種方法。
第一種方法:手工注冊 DLL 這種方法從IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下來執(zhí)行,進(jìn)入到包含有DLL的目錄,并輸入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它會把dll的特定信息注冊入服務(wù)器中的注冊表中。然后這個組件就可以在服務(wù)器上使用了,但是這個方法有一個缺陷。當(dāng)使用這種方法注冊完畢組件后,該組件必須要相應(yīng)的設(shè)置NT的匿名賬號有權(quán)限執(zhí)行這個dll。特別是一些組件需要讀取注冊表,所以,這個注冊組件的方法僅僅是使用在服務(wù)器上沒有MTS的情況下,要取消注冊這個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上注冊組件的步驟如下:
1) 打開IIS管理控制臺。
2) 展開transaction server,右鍵單擊"pkgs installed"然后選擇"new package"。
3) 單擊"create an empty package"。
4) 給該包命名。
5) 指定administrator賬號或則使用"interactive"(如果服務(wù)器經(jīng)常是使用administrator 登陸的話)。
6) 現(xiàn)在使用右鍵單擊你剛建立的那個包下面展開后的"components"。選擇 "new then component"。
7) 選擇 "install new component" 。
8) 找到你的.dll文件然后選擇next到完成。
要刪除這個對象,只要選擇它的圖標(biāo),然后選擇delete。
附注:特別要注意第二種方法,它是用來調(diào)試自己編寫組件的最好方法,而不必每次都需要重新啟動機(jī)器了。
16. ASP與Access數(shù)據(jù)庫連接:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=數(shù)據(jù)庫密碼;dbq="&mdbfile
%>
接著來,希望大家也參與近來
-------------------------------
asp編程有用的例子(二)
17. ASP與SQL數(shù)據(jù)庫連接:
<%@ 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ù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
建立記錄集對象:
set rs=server.createobject("adodb.recordset")
rs.open SQL語句,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)計函數(shù):
AVG(字段名) 得出一個表格欄平均值
COUNT(*字段名) 對數(shù)據(jù)行數(shù)的統(tǒng)計或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql="select sum(字段名) as 別名 from 數(shù)據(jù)表 where 條件表達(dá)式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統(tǒng)的計值,其它函數(shù)運(yùn)用同上。
(5) 數(shù)據(jù)表的建立和刪除:
CREATE TABLE 數(shù)據(jù)表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數(shù)據(jù)表名稱 (永久性刪除一個數(shù)據(jù)表)
19. 記錄集對象的方法:
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頁的第一行
rs.pagesize=N 設(shè)置每頁為N條記錄
rs.pagecount 根據(jù) pagesize 的設(shè)置返回總頁數(shù)
rs.recordcount 返回記錄總數(shù)
rs.bof 返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.delete 刪除當(dāng)前記錄,但記錄指針不會向下移動
rs.addnew 添加記錄到數(shù)據(jù)表末端
rs.update 更新數(shù)據(jù)表記錄
---------------------------------------
20 Recordset對象方法
Open方法
recordset.Open Source,ActiveConnection,CursorType,LockType,Options
Source
Recordset對象可以通過Source屬性來連接Command對象。Source參數(shù)可以是一個Command對象名稱、一段SQL命令、一個指定的數(shù)據(jù)表名稱或是一個Stored Procedure。假如省略這個參數(shù),系統(tǒng)則采用Recordset對象的Source屬性。
ActiveConnection
Recordset對象可以通過ActiveConnection屬性來連接Connection對象。這里的ActiveConnection可以是一個Connection對象或是一串包含數(shù)據(jù)庫連接信息(ConnectionString)的字符串參數(shù)。
CursorType
Recordset對象Open方法的CursorType參數(shù)表示將以什么樣的游標(biāo)類型啟動數(shù)據(jù),包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常數(shù) 常數(shù)值 說明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,啟動一個只能向前移動的游標(biāo)(Forward Only)。
adOpenKeyset 1 啟動一個Keyset類型的游標(biāo)。
adOpenDynamic 2 啟動一個Dynamic類型的游標(biāo)。
adOpenStatic 3 啟動一個Static類型的游標(biāo)。
-------------------------------------------------------------
以上幾個游標(biāo)類型將直接影響到Recordset對象所有的屬性和方法,以下列表說明他們之間的區(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ù)庫。
LockType
Recordset對象Open方法的LockType參數(shù)表示要采用的Lock類型,如果忽略這個參數(shù),那么系統(tǒng)會以Recordset對象的LockType屬性為預(yù)設(shè)值。LockType參數(shù)包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
-------------------------------------------------------------
常數(shù) 常數(shù)值 說明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset對象以只讀方式啟動,無法運(yùn)行AddNew、Update及Delete等方法
adLockPrssimistic 2 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)會暫時鎖住其他用戶的動作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic 3 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)并不會鎖住其他用戶的動作,其他用戶可以對數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic 4 當(dāng)數(shù)據(jù)源正在更新時,其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對數(shù)據(jù)進(jìn)行增、
刪、改的操作。
將你的網(wǎng)站設(shè)置為客戶的信任站點(diǎn)--WSH方案
ar SiteName="Acmnet"
SetTrustSite(SiteName);
WScript.Echo("You have accept 'http://acmnet/' as your Trusted Site");
要解決這個問題,首先要了解一下Windows Scripting Host,簡稱為WSH!下面引用一下微軟給的解釋:
************************************************************************
* WSH是微軟腳本技術(shù)系列中的一種,簡單講,就是提供了一種腳本環(huán)境, *
* 在這個環(huán)境中,預(yù)定義了一些對象,同時也可以使用COM里的其他對象。 *
* 他使用一種腳本引擎來對腳本解釋執(zhí)行,微軟自己支持VBSCRIPT和JSCRIPT, *
* 第三方也可以開發(fā)自己的腳本引擎。 *
************************************************************************
具體點(diǎn),就是你先編好一些腳本文件(微軟自帶例子若干,后綴.vbs或 .js),
然后用一個程序?qū)λ忉寛?zhí)行,這個程序就叫Windows Scripting Host,程序
的名字是Wscript.exe(或者命令行的Cscript.exe),你可以查看一下你的機(jī)器
里有沒有這兩個文件,就知道有沒有WSH了。(win2000是在winnt/system32/下)
這非常像批處理文件,只不過文件里不是命令行,而是腳本語言寫的腳本。
再來簡單介紹一下WSH自帶的幾個內(nèi)置對象包括:
1.由 Wscript.exe 提供的對象
Wscript 作為 Wscript 公開給腳本引擎。
WshArguments 未公開;通過 Wscript.Arguments 屬性訪問。 入
2.由 WSHom.Ocx 提供的對象。
WshShell 自動對象。ProgID 是 Wscript.WshShell。
(注:這個就是我們要用到的,可以執(zhí)行dos命令)
WshNetwork 自動對象。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ū)動器映射,快截方式創(chuàng)建,
程序加載,特殊文件夾(如系統(tǒng)文件夾)信息獲取等功能。
如果你的系統(tǒng)里支持ADO等COM部件,你同樣可以使用,
下面這個例子演示打開寫字板查看文本文件,同時創(chuàng)建一個文本文件并寫入一
段話,你可以把他拷貝到寫字板中,然后以.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編程語言中應(yīng)用
<script language="VBScript.Encode" runat=server>
'上面用SHELL對象啟動程序
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, 激活并顯示一個窗口。若窗口是最小化或最大化,則恢復(fù)到其原來的大小和位置。
4.TRUE代表返回執(zhí)行的錯誤,F(xiàn)alse或者為指定代表腳本繼續(xù)執(zhí)行而不等待進(jìn)程結(jié)束。
5.調(diào)用WSH的內(nèi)置對象了,可以象調(diào)用函數(shù)和過程一樣。
如call WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true)
現(xiàn)在我們言歸正傳來看看如何對文件進(jìn)行壓縮和解壓!
大家都知道winzip對文件解壓和壓縮都易如反掌,但是如何通過程序和命令行對其調(diào)用呢?
當(dāng)然winzip的作者已經(jīng)開發(fā)出
WinZip Command Line Support Add-On Version 1.0
大家去可以去http://www.winzip.com/wzcline.htm 下載wzcline.exe!
前提是本機(jī)須安裝winzip8.0或更高版本的支持,如果你不是winzip8.0,去
http://www.winzip.com/download.htm 下載!
下載后,直接安裝就可以!
就會在winzip的目錄中產(chǎn)生winzip命令行幫助文件和程序WZZIP.exe,WZUNZIP.EXE。
你可以開始運(yùn)行里調(diào)用:
如:"c:\program files\winzip\wzzip" myfile.zip
也可以拷貝這里兩個文件到任意目錄下,直接在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)在來簡單的了解一下幫助中兩個命令的基本用法
壓縮文件用 WZZIP.exe :
通用格式:wzzip [options] zipfile [@listfile] [files...]
[options]包括:
-a 默認(rèn)的操作,壓縮文件
-a+ 壓縮文件,并刪除要壓縮的文件
-b[drivepath] 是在另外的驅(qū)動器上創(chuàng)建臨時壓縮文件
-d 刪除zip文件中指定的目標(biāo)文件
-e<xnfs0> 是設(shè)置壓縮比率,x最大,0最小
-f 替換zip文件中存在的文件
-h-? 察看幫助
-v 創(chuàng)建一個壓縮文件的列表信息
-@list 先創(chuàng)建一個包含所有要解壓的文件的文件,然后按所包含的的文件名壓縮
...............(其他具體看幫助文件)
[@listfile] 是壓縮文件的列表信息紀(jì)錄
[files...] 則是要壓縮的多個文件,用空格隔開,也可以用通配符
例:
壓縮當(dāng)前目錄的所有文件
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
列出一個壓縮文件的列表內(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)建一個壓縮文件的列表信息
-@list 先創(chuàng)建一個包含所有要解壓的文件的文件,然后按所包含的的文件名解壓
...............(其他具體看幫助文件)
例如:
創(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對象啟動程序
'*********************
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt")

'test.asp
'*********************
'上面用SHELL對象啟動程序
'*********************
<script language="VBScript.Encode" runat=server>
'上面用SHELL對象啟動程序
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)程注冊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")
%>
<HTML>
<HEAD>
<TITLE>Regsvr32.asp</TITLE>
<STYLE TYPE="TEXT/CSS">
.Legend {FONT-FAMILY: veranda; FONT-SIZE: 14px; FONT-WEIGHT: bold; COLOR: blue}
.FS {FONT-FAMILY: veranda; FONT-SIZE: 12px; BORDER-WIDTH: 4px; BORDER-COLOR: green;
MARGIN-LEFT:2px; MARGIN-RIGHT:2px}
TD {MARGIN-LEFT:6px; MARGIN-RIGHT:6px; PADDING-LEFT:12px; PADDING-RIGHT:12px}
</STYLE>
</HEAD>
<BODY>
<FORM NAME="regForm" METHOD="POST">
<TABLE BORDER=0 CELLSPACING=6 CELLPADDING=6 MARGINWIDTH=6>
<TR>
<TD VALIGN=TOP>
<FIELDSET ID=FS1 NAME=FS1 CLASS=FS>
<LEGEND CLASS=Legend>Regsvr Functions</LEGEND>
Insert Path to DLL Directory<BR>
<INPUT TYPE=TEXT NAME="frmFolderPath" VALUE="<%=frmFolderPath%>"><BR>
<INPUT TYPE=SUBMIT NAME=btnFileList VALUE="Build File List"><BR>
<%
IF Request.Form("btnFileList") <> "" OR btnREG <> "" Then
Set RegisterFiles = New clsRegister
RegisterFiles.EchoB("<B>Select File</B>")
Call RegisterFiles.init(frmFolderPath)
RegisterFiles.EchoB("<BR><INPUT TYPE=SUBMIT NAME=btnREG VALUE=" & Chr(34) _
& "REG/UNREG" & Chr(34) & ">")
IF Request.Form("btnREG") <> "" Then
Call RegisterFiles.Register(frmFilePath, frmMethod)
End IF
Set RegisterFiles = Nothing
End IF
%>
</FIELDSET>
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<%
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("<B>Folder ( " & strRoot & " ) Not Found.")
Exit Sub
End IF
setRoot = oRootDir
Echo("<SELECT NAME=" & Chr(34) & "frmDllPath" & Chr(34) & ">")
Call getAllDlls(oRootDir)
EchoB("</SELECT>")
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("<OPTION VALUE=" & Chr(34) & oFile.Path & Chr(34) & ">" _
& oFile.Name & "</Option>")
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("<OPTION VALUE=" & Chr(34) & oFile.Path & Chr(34) & ">" _
& oFile.Name & "</Option>")
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: <INPUT TYPE=RADIO NAME=frmMethod VALUE=REG CHECKED>")
EchoB("unRegister: <INPUT TYPE=RADIO NAME=frmMethod VALUE=UNREG>")
End Sub
Function Echo(str)
Echo = Response.Write(str & vbCrLf)
End Function
Function EchoB(str)
EchoB = Response.Write(str & "<BR>" & 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
%>
詳細(xì)出處參考:http://www.jb51.net/article/5631.htm
 
1、避免使用DSN連接數(shù)據(jù)庫
是否仍舊在使用ODBC系統(tǒng)或文件DSN連接數(shù)據(jù)庫?請用OLEDB提供者代替它,這是一種速度更快而且不需要使用DSN的數(shù)據(jù)庫連接技術(shù)。使用OLEDB提供者,你不必再為了創(chuàng)建系統(tǒng)DSN懇求ISP(或數(shù)據(jù)庫管理員/網(wǎng)站管理員),也不必為了網(wǎng)站文件位置的變化而修改配置。
問:
   我看到過大量通過數(shù)據(jù)資源名字(DSN)連接數(shù)據(jù)庫的例子,不過我現(xiàn)在想不通過DSN連接數(shù)據(jù)庫。在ASP中可以實(shí)現(xiàn)這一點(diǎn)嗎?能否舉幾個具體的例子說明?我希望新的連接方法不依賴于系統(tǒng)DSN,但又可以在數(shù)據(jù)庫連接串中指定驅(qū)動程序、服務(wù)器名字、數(shù)據(jù)庫、數(shù)據(jù)庫賬號和密碼。
   答:
   如果你使用的是SQL Server 7,請使用下面的數(shù)據(jù)庫連接串:
  
strConnString = "DSN='';DRIVER={SQL SERVER};" & _
"UID=myuid;PWD=mypwd;" & _
"DATABASE=MyDb;SERVER=MyServer;"
 

   其中最重要的參數(shù)在于“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"
 

   如果你要使用數(shù)據(jù)庫連接串,但又不熟悉OLEDB提供者的連接串語法,請使用Visual Basic的數(shù)據(jù)環(huán)境設(shè)計器或ADO數(shù)據(jù)控件創(chuàng)建一個,然后把它拷貝出來用于ADO連接對象就可以了。在立即窗口中,輸入命令? dataenvironment1.connection1.ConnectionString可以得到連接串的代碼。請注意Microsoft Access連接串的語法有所不同,參見《Syntax for DSN-Less Connection for MS Access》
   參見:《ASP性能優(yōu)化指南》中的數(shù)據(jù)庫連接部分。
2、記錄集中記錄總數(shù)的計算
1062

   剛開始在ASP頁面中使用記錄集的時候可能經(jīng)常會遇到這個問題。如果你想訪問記錄集中的數(shù)據(jù),首先必須保證記錄集中確實(shí)包含數(shù)據(jù)。請記住,如果記錄集中沒有數(shù)據(jù),系統(tǒng)將顯示非常不友好的運(yùn)行時錯誤信息。你可以使用下面的代碼去解決這種問題。
   問:
   我已經(jīng)有數(shù)年的VB經(jīng)驗(yàn),但剛剛開始學(xué)習(xí)ASP和VBScript?,F(xiàn)在我要打開一個Access數(shù)據(jù)庫,計算其中的記錄總數(shù)并在Web頁面中顯示這些信息。數(shù)據(jù)庫的名字叫sean.mdb,其中包含一個people表,表中有三個記錄。然而,當(dāng)我運(yùn)行腳本時它總是說有-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 If
objRst.Close
Set objRst = Nothing
objConn.Close
Set objConn = Nothing
% >
 

   答:
   在低版本的MDAC中RecordCount屬性返回-1。請在你的服務(wù)器上把MDAC文件更新到最新的版本,最新的MDAC文件可以在www.microsoft.com/data找到。
   如果Web服務(wù)器由ISP管理而你又無權(quán)配置它,無法升級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”,這一判斷本身并沒有錯誤,然而從提問內(nèi)容來看作者不應(yīng)該作出這種假定,因?yàn)樵瓎栴}中沒有任何一行代碼意味著使用了低版本的MDAC。
   作者考慮問題的方向不對,問題的要點(diǎn)在于并非所有的游標(biāo)類型都支持所有的屬性和方法(不管采用哪種數(shù)據(jù)庫系統(tǒng))。問題中代碼出現(xiàn)錯誤的真正原因在于使用默認(rèn)的CursorLocation時:   
Recordset.CursorLocation = adUseServer
   RecordCount屬性只有在記錄集的CursorType為1或者3(即adOpenKeyset,adOpenStatic)時才是可用的。出現(xiàn)錯誤的代碼沒有指定CursorType,也就是使用了0類型的游標(biāo)(即adOpenForwardOnly,這是速度最快的游標(biāo)類型),此時對RecordCount的引用將一直返回0。
   解決問題的方法很簡單,只要把原來代碼中的:   
objRst.Open strSQL, objConn
   改成:   
objRst.Open strSQL, objConn ,1
3、數(shù)據(jù)庫搜索技巧
在數(shù)據(jù)庫搜索中,如果我們只使用等于符號搜索“Pro”是無法提取出那些能夠匹配“ASP Pro”的記錄的。下面我們要介紹的是如何使用SQL的LIKE操作符實(shí)現(xiàn)部分文本搜索。
問:
從數(shù)據(jù)庫提取記錄集時,是否有可能提取那些包含比我所指定的文本更多內(nèi)容的記錄,且不對搜索文本的出現(xiàn)位置有具體要求?
例如:   
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%'
 

   請按照這里的代碼修改實(shí)際使用的查詢。
4、數(shù)值顯示格式化
對于VB程序員來說,ASP中一個非常令人失望的改動是VBScript中不再有Format函數(shù)。那么,如何格式化數(shù)字使得它不再以默認(rèn)的格式顯示?比如,將數(shù)字顯示為百分?jǐn)?shù)、貨幣金額或者加上小數(shù)占位符。下面的代碼幫你解決這個問題,告訴你如何通過用來取代VB Format的FormatXXXX函數(shù)來格式化輸出。
   問:
   在我開發(fā)的應(yīng)用中,某個頁面要顯示一些####.####格式的數(shù)字。在ASP中如何才能實(shí)現(xiàn)?
   答:
   使用VBScript的FormatNumber函數(shù),該函數(shù)能夠返回格式化的數(shù)字表達(dá)式。語法如下:
FormatNumber(Expression [,NumDigitsAfterDecimal ][,IncludeLeadingDigit
][,UseParensForNegativeNumbers ][,GroupDigits]]]])
 

   例如,F(xiàn)ormatNumber("123.45",4)將返回123.4500。
   請參考http://msdn.microsoft.com/scripting的VBScript幫助獲得更多信息。
5、SQL命令中的引號處理
雖然用VBScript代碼構(gòu)造的SQL命令本身沒有問題,但是由于用戶輸入的表單數(shù)據(jù)中包含了單引號或雙引號,本來合法的SQL語句不再合法。相信有不少讀者已經(jīng)遇到過這個問題。下面我們要介紹的就是如何解決這類問題。
   問:
   我有一個關(guān)于SQL Server更新、插入記錄命令的問題。我想用帶有一個或多個引號的字符串來更新數(shù)據(jù)庫,SQL將字符串中的引號看成語法符號并提示錯誤。我應(yīng)該怎么辦呢?是否有其它的字符串分隔符?我已經(jīng)試過雙引號、[]、{}等,但都沒有用。
   答:
   在執(zhí)行SQL命令之前,應(yīng)當(dāng)把所有字符數(shù)據(jù)中的單引號用兩個單引號替代。
   也就是說,如果SQL命令中出現(xiàn)了帶引號的字符串(比如用戶的名字為O'Brian),就會出現(xiàn)問題:   
Update Table Set NameField = 'O'Brian'
   要解決問題,必須把字符串中的單引號轉(zhuǎn)換成兩個單引號:   
Update Table Set NameField = 'O''Brian'
   可以利用Replace函數(shù)實(shí)現(xiàn)這種轉(zhuǎn)換:   
strName = Replace(strName, "'" , "''" )
6、處理數(shù)據(jù)庫日期值
  如果說包含引號的字符串會帶來問題的話,那么對我們的某些讀者來說向數(shù)據(jù)庫傳遞日期數(shù)據(jù)更是容易出錯。下面我們根據(jù)所用數(shù)據(jù)庫系統(tǒng)的類型分別解釋如何正確地完成這一任務(wù)。
問:如何使用ASP向數(shù)據(jù)庫傳遞日期數(shù)據(jù)?
答:答案與所用數(shù)據(jù)庫類型有關(guān)。假設(shè)我們使用名為“strDate”的變量保存日期數(shù)據(jù),如果使用Access數(shù)據(jù)庫,那么生成字符串的代碼為:
strSQL = " 合法的SQL命令 " & "#" & strDate & "#"
 

   如果使用的是SQL Server、Sybase、Oracle等數(shù)據(jù)庫,則代碼為:
strSQL = "合法的SQL命令" & "'" & strDate & "'"
 

   注意兩者的區(qū)別在于發(fā)送日期數(shù)據(jù)所用的分隔符。Access使用“#”,而其他數(shù)據(jù)庫使用的是單引號“'”。
7、檢查Cookie是否啟用
用戶已經(jīng)禁用Cookie?看來,這個用戶不那么信任你。不過,既然他這么樂意搞小動作,你也不妨來一下。使用下面介紹的方法,你可以檢查用戶是否已經(jīng)禁用了Cookie,然后禮貌地告訴他如果要使用網(wǎng)站的全部功能,那么他必須啟用Cookie。
   問:
   如何才能知道用戶是否關(guān)閉了Cookie?
   答:
   要檢查用戶是否已經(jīng)關(guān)閉了Cookie,可按如下步驟進(jìn)行:
設(shè)置一個Cookie。
重定向頁面。
在重定向頁面中讀取Cookie。
如果存在Cookie,則用戶已經(jīng)啟用了Cookie;否則,說明用戶禁用了Cookie。
通過查詢字符串確定當(dāng)前位于步驟1還是3。
   代碼實(shí)例如下:   
  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 If
8、檢查文件是否存在
如果你通過ASP來管理文件,在處理某個文件之前必須確認(rèn)一下該文件確實(shí)存在。下面介紹的簡單代碼可用于驗(yàn)證文件是否存在。
   問:
   我想訪問某個數(shù)據(jù)庫中的PDF文件,并在HTML頁面中創(chuàng)建對這些文件的鏈接。在刷新鏈接之前,我想要驗(yàn)證文件是否確實(shí)存在。如何在ASP中實(shí)現(xiàn)驗(yàn)證功能?
   答:
   在ASP中可以使用FileSystemObject的FileExists方法驗(yàn)證文件是否存在。
Dim fs, strFileNameAndPath
strFileNameAndPath = 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組件,一定知道更新組件版本時候所出現(xiàn)的錯誤信息“不能更新DLL文件,訪問禁止”,或許已經(jīng)有好多次被它擋駕了。下面我們介紹的是一個小巧的批命令文件,你可以用它來自動啟動或關(guān)閉鎖定DLL文件的MTS。
問:
我們所用的IIS 4.0上運(yùn)行著ASP和一個Visual Basic 6.0 DLL文件,DLL文件用來為ASP頁面提供數(shù)據(jù)服務(wù)。問題是,當(dāng)我們想要把Web服務(wù)器上的DLL升級到新的版本時,系統(tǒng)總是顯示DLL文件正在使用中,既不能上載也不能注冊這個新的DLL。我們試過關(guān)閉Web網(wǎng)站以及IIS,但DLL文件仍處于使用狀態(tài)。唯一的辦法似乎是關(guān)閉服務(wù)器。如你所知,網(wǎng)站運(yùn)行時關(guān)閉服務(wù)器顯然不太合適。你是否有解決這個問題的方法?有一個16位的工具軟件WPS可以關(guān)閉DLL,然而,它不能用于VB6的DLL文件。
   答:
   不能更新DLL文件的原因在于Microsoft Transaction Server(MTS)已經(jīng)打開了DLL的一個實(shí)例,必須使用mtxstop才能關(guān)閉它。首先,創(chuàng)建批命令文件FlushCache.bat,在文件中輸入以下內(nèi)容:
net stop iisadmin /y
mtxstop
net start w3svc
   運(yùn)行這個批命令文件。它將在大約5秒鐘內(nèi)關(guān)閉Web服務(wù)器并重新啟動它。在關(guān)閉和啟動兩個操作之間它將清除MTS緩沖,然后你就可以更新DLL文件。
   第一次運(yùn)行批命令文件的時候,要注意一下其他被關(guān)閉的服務(wù)(例如FTP服務(wù)等)。寫下這些被關(guān)閉的服務(wù),然后打開批命令文件,加入代碼使得這些服務(wù)也被重新啟動:
net start < 服務(wù)的名字 >
   2000年06月03日,Bill Bassett提出了另外一種方法:
   有一種解決該問題的更為簡單的方法,這就是配置應(yīng)用使其運(yùn)行在自己獨(dú)立的內(nèi)存空間中。運(yùn)行IIS MMC,右擊包含目標(biāo)應(yīng)用的分支,選擇“屬性”。在屬性對話框中間的應(yīng)用設(shè)置區(qū),輸入應(yīng)用的名字并選中“在獨(dú)立的內(nèi)存空間運(yùn)行”檢查框。
   應(yīng)用運(yùn)行的時候,只要再次打開其屬性頁面就可以看到此時“卸載”按鈕已經(jīng)變?yōu)榭捎昧?。點(diǎn)擊這個按鈕應(yīng)用卸載,你可以更新DLL文件。該操作并不取消DLL的注冊,所以這些工作要用regsvr32手工完成。這種方法要比關(guān)閉IIS等服務(wù)再重新啟動它們要好。
10、記錄文件下載日志
這是一個簡單但很實(shí)用的技巧,用于監(jiān)測有多少用戶從網(wǎng)站下載了文件。
   問:
   我們需要監(jiān)測用戶在網(wǎng)站上的文件下載操作。當(dāng)用戶點(diǎn)擊鏈接下載文件時,我們希望能夠運(yùn)行某個ASP文件將日志數(shù)據(jù)寫入SQL Server數(shù)據(jù)庫,然后執(zhí)行下載操作。問題是,ASP頁面如何才能在記錄日志數(shù)據(jù)之后再將文件下載到客戶端?
   答:
   竅門在于用超級鏈接啟動第二個“后臺”腳本,用它來記錄下載日志并啟動下載過程。只要第二個頁面不產(chǎn)生任何HTML輸出,用戶瀏覽器將仍舊顯示第一個頁面。
   下面是第一個文件中的鏈接示例:
   Download code.zip (不要點(diǎn)擊這個鏈接,它只用于演示,沒有任何實(shí)際功能。)
   以上鏈接由下面的代碼創(chuàng)建:
< A HREF="dnladd.asp?filename=code.zip" >Download code.zip< /A >
   用戶點(diǎn)擊鏈接時我們把待下載的文件名傳遞給了第二個文件dnladd.asp。Dnladd.asp包含了把下載文件名字和其他信息寫入數(shù)據(jù)庫的腳本。完成數(shù)據(jù)庫操作后,dnladd.asp用如下代碼啟動下載過程:
Response.ContentType = "application/x-zip-compressed"
Response.Redirect request("filename")
   注意:不要在dnladd.asp中輸出任何HTML代碼。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASP創(chuàng)建數(shù)據(jù)庫,新建數(shù)據(jù)表、字段
ASP中rs.open sql,conn,1,3中的1,3是什么意思
ASP編程技巧大全
ASP連接Access數(shù)據(jù)庫幾種常見方法
Excel、VBA與MySQL交互
ASP中Connection對像封裝dll解決方案
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服