ASP進階技巧精選集

來源:互聯網
上載者:User

一、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慢。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.