程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> ASP高級技巧精選集

ASP高級技巧精選集

編輯:關於ASP編程
一、GetRows的使用方法:
<%
Set conn=Server.CreateObject("Adodb.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("test.mdb")
Set Rs=Server.CreateObject("Adodb.Recordset")
Rs.Open "Select Top 2 * From 表名",conn,0,1

Dim Array_str
Array_str = rs.GetRows()

Response.Write "第一條記錄:<br>"
Response.Write Array_str(0,0)&"<br>"
Response.Write Array_str(1,0)&"<br>"
Response.Write Array_str(2,0)&"<br>"
Response.Write Array_str(3,0)&"<br>"
Response.Write "第二條記錄:<br>"
Response.Write Array_str(0,1)&"<br>"
Response.Write Array_str(1,1)&"<br>"
Response.Write Array_str(2,1)&"<br>"
Response.Write Array_str(3,1)&"<br>"
%>
熟悉GetRows你會發現操作數據庫更簡捷、速度更優化。優點可是很多的哦:)

 

二、聲明變量是必要的嗎?
以下情況需要聲明變量:
1.你是一個好的程序員
2.寫高質量的代碼
加入以下代碼可以強制聲明變量:
<%Option Explicit%>

 

三、如何在客戶端調用服務器端的函數?
    遠程腳本調用技術(Remote Scripting)的特點是客戶端腳本調用服務器腳本時無需刷新整個頁面。
    一般情況下,Web頁面需要與服務器交互時必須提交表單數據,刷新整個頁面。而利用遠程腳本調用技術,客戶端腳本可以像調用本地函數一樣調用遠程腳本函數,特別是在復雜的表單驗證和頻繁的數據庫操作中,這種優勢更是得到了淋漓盡致的發揮。
    它的基本原理是其借助本身提供的一組接口函數,客戶端程序可以通過一個代理過程(一個java applet)調用服務器端代碼。JavaApplet(RSProxy.class)在後台工作,通常情況下用戶代碼並不需要直接操作它,它的配置也是自動完成的。遠程腳本調用既可以是同步調用---調用命令發出後一直等待,直到服務器執行函數結束後返回;也可以是異步調用---函數調用後立即返回,調用必須同時給出回調函數。一個基本遠程腳本調用技術必須包含如下文件:
    RS.htm:包含客戶端支持代碼
    RSProxy.class:這是一個Java Applet,實際完成客戶/服務器交互過程
    RS.asp:服務器端支持代碼
    使用遠程腳本調用功能時,客戶端和服務器端代碼都必須符合一定的要求:在服務器端,首先必須啟用遠程腳本調用:用#include包含RS.asp,並調用RSDispath函數。在服務器端實現遠程腳本支持的關鍵在於創建public_description對象。它在遠程調用時腳本執行過程和普通ASP頁面執行過程不同,它把全局腳本代碼放入函數並顯式調用。
    遠程腳本調用技術要求服務器端的腳本必須用javascript編寫。下面示例聲明了一個Description類,該類包含一個公用的saml函數,用new關鍵字創建Description,即public_description對象。
    1.遠程腳本調用對象服務器端的要求:
<%@language=vbscript%>
<%RSDispatch%>
<!--#include file="../rs.asp"-->
<Script language=javascript runat=server>
function Description(){
    this.saml=saml;
}
public_description=new Description();
function saml(str){
    return "hi!" + str + ":\n你的SessionID=" + Session.SessionID+"\n你的IP="+Request.ServerVariables("REMOTE_ADDR");
}
</Script>

2.遠程調用功能對客戶端的要求。首先,啟用遠程腳本調用技術功能的Web頁面必須引用RS.htm;其次,必須調用RSEnableRemoteScripting函數。RSEnableRemoteScripting函數允許在參數中指定RSProxy.class文件所在的實際路徑,果沒有指定這個參數,默認為RSProxy.class在_scriptLibrary目錄下:
<script language="javascript" src="../rs.htm"></script>
<script language="javascript">RSEnableRemoteScripting("..");</script>

3.調用遠程腳本。完成上面的准備工作後,就可以用RSExecute方法在客戶端代碼中遠程調用服務器端函數了。該方法接受的參數包括服務器ASP頁面的URL、遠程函數名字以及參數列表。其調用結果是一個調用對象(Call Object),包含該次調用的返回值以及狀態信息,其主要屬性包括:
id:該次調用的唯一標識(屬性實際上是一個XML字符串);
return_value:實際返回值,如果存在的話;
data:服務器響應該次遠程調用返回的原始數據;
status:標識本次調用的狀態,-1表示失敗,0表示完成。
message:有關本次調用的文本信息。如調用成功,為Completed,否則,包含錯誤說明。

 

四、從SQL數據庫中調用圖片顯示:
<%@language=VBscript%>
<%Option Explicit%>
<%
Dim conn,rs,pic,picsize
Response.Buffer=True
'設置http表頭信息,以便讓浏覽器解釋作為gif圖象返回的數據
Response.ContentType="image/gif"
set conn=server.createobject("adodb.connection")
conn.open "................."
set rs=server.createobject("adodb.recordset")
rs.open ".................",conn,0,1
picsize=rs("img").actualsize
pic=rs("img").getchunk(picsize)
response.binarywrite pic
response.end
%>

 

五、使用DLL一定比ASP代碼速度快嗎?
不一定,在IIS5.0裡,ASP的速度已經得到了一定的提升,很多情況下ASP代碼運行速度比使用DLL更快。如果DLL代碼編寫得不夠理想,往往比ASP更慢。但DLL有比ASP更好的優勢:比如功能、安全性、共享等。

 

六、如何在不同頁面間共享數組內容?
a.asp文件內容:
<%
Dim arr(5)
Dim str,i
'給數據賦值
For i= 0 to 5
    arr(i)=i
Next
'傳遞數組
str=join(arr)
Response.Write "<a href=test.asp?tempstr="& str &">傳送數組內容</a>"
%>

test.asp內容:
<%
dim tempstr
tempstr=split(Request("str"),",")
response.write tempstr(0) & "<br>" & tempstr(1)
%>

 

七、Eval的用法:
<%
m="50+60+80"
response.write eval(m)
%>

 

八、為什麼在ADO訪問數據庫時使用事務會提示出錯?
情況一:
set dbconn=server.createobject("adodb.connection")
set dbcmd=server.createobject("adodb.command")
dbconn.open "dsn=sqlforum;uid=sa;pwd=;"
dbconn.BeginTrans
Rs.Open "select * from message",dbconn
set dbcmd.activeconnection=dbconn
以上語句提示如下錯誤信息:
Unspecified error

情況二:
set dbconn=server.createobject("adodb.connection")
bconn.open "dsn=sqlforum;uid=sa;pwd=;"
dbconn.BeginTrans
以上語句提示如下信息:
Cannot start transaction while in firehose mode.

情況三:
set dbconn=server.createobject("adodb.connection")
set dbcmd=server.createobject("adodb.command")
dbconn.open "dsn=sqlforum;uid=sa;pwd=;"
rs.open "select * from message",dbconn
set dbcmd.activeconnection=dbconn
dbconn.BeginTrans
以上語句提示如下信息:
Cannot start transaction because more than one hdbc is in use.

這是怎麼回事?如何解決?
    "firehose"指的是一個只讀的游標模式。當我們打開Recordset時沒有指定游標類型,則Recordset會以向前的游標打開,與SQLserver連用時,我們稱之為"firehose"。此連接會一直打開,查詢結果會盡快打開,而這種只讀方式下是不能執行事務的。
    像上面幾中情況出錯的原因都是由於在"firehose"模式,command對象的activeconnection的游標模式是readonly的。
    改變"firehose"的方法有如下幾種:
    1.設定connection的游標類型不是向前只讀。
    2.在開始事務之前關閉使用同一連接的recordset對象。

 

九、用Insert into 還是 Addnew?
Addnew實質上是封裝了Insert into,所以速度會比Insert into慢。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved