1. 程式人生 > >ASP 程式設計中20個非常有用的例子

ASP 程式設計中20個非常有用的例子

1.如何用Asp判斷你的網站的虛擬物理路徑
答:使用Mappath方法
< p align="center" >< font size="4" face="Arial" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color="#FF0000" size="6" face="Arial" >
< %= Server.MapPath("")% >
< /font >< /p >
2.我如何知道使用者所用的瀏覽器?
答:使用the Request object方法
strBrowser=Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strBrowser,"MSIE") < > 0 Then
   Response.redirect("ForMSIEOnly.htm")
Else
   Response.redirect("ForAll.htm")
End If
3.如何計算每天的平均反覆訪問人數
答:解決方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
顯示結果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998

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

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

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

Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
End Function

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

8.強迫輸入密碼對話方塊
答:把這句話放載頁面的開頭
< % response.status="401 not Authorized"
response.end
% >

9.如何傳遞變數從一頁到另一頁
答:用 HIDDEN 型別來傳遞變數
< % form method="post" action="mynextpage.asp" >
< % for each item in request.form % >
< input namee="< %=item% >" type="HIDDEN"
value="< %=server.HTMLEncode(Request.form(item)) % >" >
< % next % >
< /form >

10.為何我在 asp 程式內使用 msgbox,程式出錯說沒有許可權
答:由於 asp 是伺服器執行的,如果可以在伺服器顯示一個對話方塊,那麼你只好等有人按了確定之後,你的程式才能繼續執行,而一般伺服器不會有人守著,所以微軟不得不禁止這個函式,並胡亂告訴你 (:) 呵呵) 沒有許可權。但是ASP和客戶端指令碼結合倒可以顯示一個對話方塊,as follows:
< % yourVar="測試對話方塊"% >
< % s cript language='javas cript' >
alert("< %=yourvar% >")
< /s cript >

11.有沒有辦法保護自己的原始碼,不給人看到
答:可以去下載一個微軟的Windows s cript Encoder,它可以對asp的指令碼和客戶端javas cript/vbs cript指令碼進行加密。。。不過客戶端加密後,只有ie5才能執行,伺服器端指令碼加密後,只有伺服器上安裝有s cript engine 5(裝一個ie5就有了)才能執行。

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

13.global.asa檔案總是不起作用?
答:只有web目錄設定為web application, global.asa才有效,並且一個web application的根目錄下 global.asa才有效。IIS4可以使用Internet Service Manager設定application setting 怎樣才能使得htm檔案如同asp檔案一樣可以執行指令碼程式碼?

14.怎樣才能使得htm檔案如同asp檔案一樣可以執行指令碼程式碼?
答:Internet Sevices Manager - > 選擇default web site - >右鼠鍵- >選單屬性-〉主目錄- > 應用程式設定(Application Setting)- > 點選按鈕 "配置"- > app mapping - >點選按鈕"Add" - > executable browse選擇 WINNTSYSTEM32INETSRVASP.DLL EXTENSION 輸入 htm method exclusions 輸入PUT.DELETE 全部確定即可。但是值得注意的是這樣對htm也要由asp.dll處理,效率將降低。

15.如何註冊元件
答:有兩種方法。
第一種方法:手工註冊 DLL 這種方法從IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令列方式下來執行,進入到包含有DLL的目錄,並輸入:regsvr32 component_name.dll 例如 c:tempregsvr32 AspEmail.dll 它會把dll的特定資訊註冊入伺服器中的登錄檔中。然後這個元件就可以在伺服器上使用了,但是這個方法有一個缺陷。當使用這種方法註冊完畢元件後,該元件必須要相應的設定NT的匿名帳號有許可權執行這個dll。特別是一些元件需要讀取登錄檔,所以,這個註冊元件的方法僅僅是使用在伺服器上沒有MTS的情況下,要取消註冊這個dll,使用:regsvr32 /u aspobject.dll example c:tempregsvr32 /u aneiodbc.dll

第二種方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改進。MTS允許你指定只有有特權的使用者才能夠訪問元件,大大提高了網站伺服器上的安全性設定。在MTS上註冊元件的步驟如下:
1) 開啟IIS管理控制檯。
2) 展開transaction server,右鍵單擊"pkgs installed"然後選擇"new package"。
3) 單擊"create an empty package"。
4) 給該包命名。
5) 指定administrator帳號或則使用"interactive"(如果伺服器經常是使用administrator 登陸的話)。
6) 現在使用右鍵單擊你剛建立的那個包下面展開後的"components"。選擇 "new then component"。
7) 選擇 "install new component" 。
8) 找到你的.dll檔案然後選擇next到完成。
要刪除這個物件,只要選擇它的圖示,然後選擇delete。
附註:特別要注意第二種方法,它是用來除錯自己編寫元件的最好方法,而不必每次都需要重新啟動機器了。

16. ASP與Access資料庫連線:

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

%>

17. ASP與SQL資料庫連線:

<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL伺服器名稱或IP地址;UID=sa;PWD=資料庫密碼;DATABASE=資料庫名稱
%>


寫到資料庫的內容,讀出來時沒有了空格和換行 ,該怎麼解決?
或與此類似問題

問題的解答就是在寫入資料庫做Replace替換
拿出我用的一個函式供大家參考

<%
'----------Html轉換為文字:編輯時拿來做轉換
Function Html2Text(Str1)
If isNULL(Str1) Then
Html2Text=""
Exit Function
End If
Str1=Replace(Str1,"&lt;","<")
Str1=Replace(Str1,"&gt;",">")
Str1=Replace(Str1,"<br/>",VBcrlf)
Str1=Replace(Str1,"&quot;",chr(34))
Str1=Replace(Str1,"&nbsp;"," ")
Str1=Replace(Str1,"&amp;","&")
Html2Text=Str1
End Function
'-------------------文字轉換為Html:寫入資料庫時使用---------------
Function Text2Html(Str1)
If isNULL(Str1) Then
Text2Html=""
Exit Function
End If
Str1=Replace(Str1,"&","&amp;")
Str1=Replace(Str1,"<","&lt;")
Str1=Replace(Str1,">","&gt;")
Str1=Replace(Str1,VBcrlf,"<br/>")
Str1=Replace(Str1,chr(34),"&quot;")
Str1=Replace(Str1,chr(9),"&nbsp;&nbsp;&nbsp;")
Str1=Replace(Str1," ","&nbsp;")
Text2Html=Str1
End Function

%>

二.關於小數點前0的顯示問題

1.如果小數點後位數是固定的,那麼可以使用函式FormatNumber()

示例:

<%
MyNumber=0.323
Response.Write FormatNumber(MyNumber,2,-1) '保留小數點後兩位
%>

2.如果小數點後位數不固定,那麼可以如下

示例:
<%
MyNumber=0.323
If Left(Cstr(MyNumber),1)="." Then Response.Write "0"&MyNumber Else Response.Write MyNumber
%>
也可以寫一個函式
<%
Function FormatNum(Num)
If Left(Cstr(Num),1)="." Then FormatNum="0"&Num Else FormatNum=Num
End Function
%>

建立記錄集物件:

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

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

(1) 資料記錄篩選:

sql="select * from 資料表 where 欄位名=欄位值 order by 欄位名 [desc]"

sql="select * from 資料表 where 欄位名 like '%欄位值%' order by 欄位名 [desc]"

sql="select top 10 * from 資料表 where 欄位名 order by 欄位名 [desc]"

sql="select * from 資料表 where 欄位名 in ('值1','值2','值3')"

sql="select * from 資料表 where 欄位名 between 值1 and 值2"

(2) 更新資料記錄:

sql="update 資料表 set 欄位名=欄位值 where 條件表示式"

sql="update 資料表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n where 條件表示式"

(3) 刪除資料記錄:

sql="delete from 資料表 where 條件表示式"

sql="delete from 資料表" (將資料表所有記錄刪除)

(4) 新增資料記錄:

sql="insert into 資料表 (欄位1,欄位2,欄位3 …) valuess (值1,值2,值3 …)"

sql="insert into 目標資料表 select * from 源資料表" (把源資料表的記錄新增到目標資料表)

(5) 資料記錄統計函式:

AVG(欄位名) 得出一個表格欄平均值
COUNT(*|欄位名) 對資料行數的統計或對某一欄有值的資料行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把資料欄的值相加

引用以上函式的方法:

sql="select sum(欄位名) as 別名 from 資料表 where 條件表示式"
set rs=conn.excute(sql)

用 rs("別名") 獲取統的計值,其它函式運用同上。

(5) 資料表的建立和刪除:

CREATE TABLE 資料表名稱(欄位1 型別1(長度),欄位2 型別2(長度) …… )

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

DROP TABLE 資料表名稱 (永久性刪除一個數據表)

19. 記錄集物件的方法:

rs.movenext 將記錄指標從當前的位置向下移一行
rs.moveprevious 將記錄指標從當前的位置向上移一行
rs.movefirst 將記錄指標移到資料表第一行
rs.movelast 將記錄指標移到資料表最後一行
rs.absoluteposition=N 將記錄指標移到資料表第N行
rs.absolutepage=N 將記錄指標移到第N頁的第一行
rs.pagesize=N 設定每頁為N條記錄
rs.pagecount 根據 pagesize 的設定返回總頁數
rs.recordcount 返回記錄總數
rs.bof 返回記錄指標是否超出資料表首端,true表示是,false為否
rs.eof 返回記錄指標是否超出資料表末端,true表示是,false為否
rs.delete 刪除當前記錄,但記錄指標不會向下移動
rs.addnew 新增記錄到資料表末端
rs.update 更新資料表記錄

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

20 Recordset物件方法

Open方法

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

Source
Recordset物件可以通過Source屬性來連線Command物件。Source引數可以是一個Command物件名稱、一段SQL命令、一個指定的資料表名稱或是一個Stored Procedure。假如省略這個引數,系統則採用Recordset物件的Source屬性。

ActiveConnection
Recordset物件可以通過ActiveConnection屬性來連線Connection物件。這裡的ActiveConnection可以是一個Connection物件或是一串包含資料庫連線資訊(ConnectionString)的字串引數。

CursorType
Recordset物件Open方法的CursorType引數表示將以什麼樣的遊標型別啟動資料,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常數 常數值 說明
-------------------------------------------------------------
adOpenForwardOnly 0 預設值,啟動一個只能向前移動的遊標(Forward Only)。
adOpenKeyset 1 啟動一個Keyset型別的遊標。
adOpenDynamic 2 啟動一個Dynamic型別的遊標。
adOpenStatic 3 啟動一個Static型別的遊標。
-------------------------------------------------------------
以上幾個遊標型別將直接影響到Recordset物件所有的屬性和方法,以下列表說明他們之間的區別。

-------------------------------------------------------------
Recordset屬性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
ADO Recordset的屬性和方法的有效性

ADO Recordset的屬性和方法在不同的游標型別下,有不同的表現,這裡列出了其詳細情況列表
ADO Recordset屬性的有效性列表

屬性 ForwardOnly Dynamic Keyset Static

AbsolutePage 無效 無效 讀/寫 讀/寫
AbsolutePosition 無效 無效 讀/寫 讀/寫
ActiveConnection 讀/寫 讀/寫 讀/寫 讀/寫
BOF 只讀 只讀 只讀 只讀
Bookmark 無效 無效 讀/寫 讀/寫
CacheSize 讀/寫 讀/寫 讀/寫 讀/寫
CursorLocation 讀/寫 讀/寫 讀/寫 讀/寫
CursorType 讀/寫 讀/寫 讀/寫 讀/寫
EditMode 只讀 只讀 只讀 只讀
EOF 只讀 只讀 只讀 只讀
Filter 讀/寫 讀/寫 讀/寫 讀/寫
LockType 讀/寫 讀/寫 讀/寫 讀/寫
MarshalOptions 讀/寫 讀/寫 讀/寫 讀/寫
MaxRecords 讀/寫 讀/寫 讀/寫 讀/寫
PageCount 無效 無效 只讀 只讀
PageSize 讀/寫 讀/寫 讀/寫 讀/寫
RecordCount 無效 無效 只讀 只讀
Source 讀/寫 讀/寫 讀/寫 讀/寫
State 只讀 只讀 只讀 只讀
Status 只讀 只讀 只讀 只讀


在使用Microsoft OLE DB Provider for ODBC.1.0時候,屬性AbsolutePosition
和AbsolutePage是隻寫的

ADO Recordse方法的有效性列表

方法 ForwardOnly Dynamic Keyset Static

AddNew 是 是 是 是
CancelBatch 是 是 是 是
CancelUpdate 是 是 是 是
Clone 否 否 是 是
Close 是 是 是 是
Delete 是 是 是 是
GetRows 是 是 是 是
Move 是 是 是 是
MoveFirst 是 是 是 是
MoveLast 否 是 是 是
MoveNext 是 是 是 是
MovePrevious 否 是 是 是
NextRecordset * 是 是 是 是
Open 是 是 是 是
Requery 是 是 是 是
Resync 否 否 是 是
Supports 是 是 是 是
Update 是 是 是 是
UpdateBatch 是 是 是 是

* Microsoft Access databases.不支援
--------------------------------------------------------------
其中NextRecordset方法並不適用於Microsoft Access資料庫。

LockType
Recordset物件Open方法的LockType引數表示要採用的Lock型別,如果忽略這個引數,那麼系統會以Recordset物件的LockType屬性為預設值。LockType引數包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:

-------------------------------------------------------------
常數 常數值 說明
--------------------------------------------------------------
adLockReadOnly 1 預設值,Recordset物件以只讀方式啟動,無法執行AddNew、Update及Delete等方法
adLockPrssimistic 2 當資料來源正在更新時,系統會暫時鎖住其他使用者的動作,以保持資料一致性。
adLockOptimistic 3 當資料來源正在更新時,系統並不會鎖住其他使用者的動作,其他使用者可以對資料進行增、刪、改的操作。
adLockBatchOptimistic 4 當資料來源正在更新時,其他使用者必須將CursorLocation屬性改為adUdeClientBatch才能對資料進行增、
刪、改的操作。

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

RS.OPEN SQL,CONN,A,B

A:

ADOPENFORWARDONLY(=0)
只讀,且當前資料記錄只能向下移動

ADOPENKEYSET(=1)
只讀,當前資料記錄可自由移動

ADOPENDYNAMIC(=2)
可讀寫,當前資料記錄可自由移動

ADOPENSTATIC(=3)
可讀寫,當前資料記錄可自由移動,可看到新增記錄

B:

ADLOCKREADONLY(=1)
預設鎖定型別,記錄集是隻讀的,不能修改記錄

ADLOCKPESSIMISTIC(=2)
悲觀鎖定,當修改記錄時,資料提供者將嘗試鎖定記錄以確保成功地編輯記錄。只要編輯一開始,則立即鎖住記錄。

ADLOCKOPTIMISTIC(=3)
樂觀鎖定 ,直到用Update方法提交更新記錄時才鎖定記錄。 ADLOCKBATCHOPTIMISTIC(=4)
批量樂觀鎖定,允許修改多個記錄,只有呼叫UpdateBatch方法後才鎖定記錄。

當不需要改動任何記錄時,應該使用只讀的記錄集,這樣提供者不用做任何檢測。
對於一般的使用,樂觀的鎖定可能是最好的選擇,因為記錄只被鎖定一小段時間,
資料在這段時間被更新。這減少了資源的使用。