強烈推薦ASP初學者觀看:常用ASP技術

來源:互聯網
上載者:User
初學 對於用ASP技術編程的初學者來說,無從下手是第一感覺,筆者曾經有這麼一段經曆。經過一番"磨難"以後,你就會找到靈感。現將本人編程中積累的一些經驗,擬成本文,奉獻給讀者。

1 首先要學習一些例子程式。

接到任務後,不要盲目地急於編寫代碼,而是先看一下別人成功的例子,然後在其上修改或模仿調試,這樣會加快你熟悉的速度。例如,關於ASP編程的教科書上經常有這麼一個例子出現,即顯示系統目前時間的語句:<%=now()%> ,別看這麼簡單的一條語句,裡邊卻包含了ASP的編程思想和格式,會給你後邊的工作帶來很大的協助。比如說,測試IIS(Internet Information Server)WEB SERVER是否正常工作,用上邊的一個語句測試就足夠了。

2 在WINDOWS NT上安裝ODBC後,要測試和後台資料庫確實連通後,再開始編程測試。
可能您沒有看懂題目的意思,我在這裡解釋一下:比如說,後台資料庫是ORACLE,那麼在NT SEVER上首先要安裝SQL*NET(或NET 8),然後配置ODBC,確定和ORACLE資料庫連通,可以用SQL*PLUS測試,還要選擇和ORACLE資料庫相同的字元集,這個工作要在註冊表裡完成。最後在ODBC裡邊測試和ORACLE資料庫連通後,說明WEB SERVER 到後台資料庫端的工作就完成了,下邊再開始編程工作。反過來,你若先編程,後做ODBC的工作,那麼你無法偵錯工具是否正確,可能大大降低編程效率。在ODBC配置中要選擇MICROSOFT ODBC FOR ORACLE,不要選擇ORACLE ODBC DRIVER,否則不能和資料庫建立聯絡。

在ASP程式中,和資料庫連接的語句是比較固定的,舉例如下:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "odbclink","o7people","peoplepd"
在這裡,odbclink是資料來源的名字,可以說成是ODBC和資料庫連接的定義,o7people是ORACLE的一個使用者名稱,peoplepd是使用者o7people的密碼。
3 記錄下出錯資訊,尋找錯誤修正規律。
在編程、調試過程中,是一個出錯、錯誤修正的迴圈過程,但是時間長了,會發現一些規律,排除錯誤的效率會大大提高。
3.1 出錯資訊:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ' 80040e14'
[Microsoft][ODBC driver for Oracle][Oracle]ORA-00933: SQL command not properly ended
/default.asp, 行781
這種錯誤,一般是在執行 Conn.Execute("SQL 陳述式")操作時,所定義的"SQL 陳述式"有問題,檢查此語句就能發現問題,如日期格式不對,等等。
zhezhong
3.2 出錯資訊:
ADODB.Field 錯誤 ' 800a0bcd'
BOF 或 EOF 中有一個是"真",或者當前的記錄已被刪除,但應用程式要求操作的是當前的記錄。
/lzjsblr.asp, 行123
這個錯誤,一般發生在執行下列語句的過程中:
set RS = Conn.Execute("SQL 陳述式" )
varnum1=RS(0)
RS.CLOSE
所取的值RS(0)無意義或無意義,還要檢查"SQL 陳述式"的正確性。
3.3 出錯資訊:
Microsoft VBScript 編譯器錯誤 錯誤 ' 800a0409'
未結束的字串常量
/people/default.asp, 行86
insert_sql = insert_sql & dwdm & ",'" & d1 & "','" & t1 & "','" & t2 & "',
--------------------------------------------------------------------------^
次項錯誤也是出在SQL語句的定義上,檢查引號、單引號等的配對情況。
4 下邊是一個基於瀏覽器的網上使用者註冊登記程式,筆者在裡邊運用了一些技巧,奉獻給感興趣的讀者。
<html>
<head>
……
<
<%'和資料庫連接
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "odbclink","o7people","peoplepd"
'將選擇的資料放入選擇框
Set RS = Conn.Execute("SELECT dwmc FROM tab_dw order by dwdm")
%>
<% Do While Not RS.EOF %> <option><% = RS(0) %></option>
<%
RS.MoveNext
Loop
RS.Close
%>
<%
'定義變數
Dim D1,D2,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,csrq,sqrq
'事件觸發按鈕
B1="commit"
B2="return"
%>
<%
'將資訊初始化
Sub Reset()
D1 = ""
……
T9 = date()
T10 = ""
End Sub
%>
<%
Call Reset()
%>
<%
'資訊提交條件(觸發條件)
if Request("B1") = "commit" Then ' Save Button
D1 = Request("D1")
set DWDM_RS = Conn.Execute("SELECT dwdm FROM table_dw where dwmc='"&D1&"' " )
DWDM=DWDM_RS(0)
DWDM_RS.CLOSE
D2 = Request("D2")
……
'日期資料轉換成ORACLE識別的格式
csrq = DAY(T6) & "-" & month_array(Month(T6)) & "-" & Year(T6)
sqrq = DAY(T9) & "-" & month_array(Month(T9)) & "-" & Year(T9)
'定義SQL語句
Sql_insert = "INSERT INTO peopleuser(dwdm,dwmc,sjks,tele,address,zipcode,xm,xb,csrq,peoplename,peoplepd,sqsj,bz) VALUES ('"
Sql_insert = Sql_insert & DWDM & "','" & D1 & "','" & T1 & "','" & T2 & "','" & T3 & "','" & T4 & "','"
Sql_insert = Sql_insert &T5&"','"& D2 & "','" & CSRQ & "','" & T7 & "','" & T8 & "','" & SQRQ & "','"
Sql_insert = Sql_insert & T10 & "')"
'將資訊入庫
Set LFMC_R4 = Conn.Execute(Sql_insert)
'資訊提交完成後,將螢幕資訊初始化
call reset()
end if
%>

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  1、設計規劃
  現在是模組化程式設計的天下,應用程式要實現的目標就是金字塔尖,進行程式設計規劃的意義就在於,對構成金字塔的基礎模組進行劃分,規劃得越詳細,模組分工越明確,越容易明白下一步該做什麼,這好比搭積木的遊戲,你可以把你的積木塊組合成各種各樣的形狀,但首先要熟悉每個積木塊的功能。

  2、有備無患
  實戰之前,先找幾個範例程式研究研究,最起碼明白怎麼開頭,怎麼結尾,別打無準備之仗。

  3、葵花寶典
  做一份所用程式語言的精簡列表,包括基礎資料型別 (Elementary Data Type)、各類運算子說明、基本語句結構、常用關鍵詞(保留字)、常用函數(控制項)說明等等。

  4、自由獨立
  為你的應用程式建立一個單獨的目錄,這樣既方便應用程式檔案的管理,而且如果你要給程式搬“家”,捲起鋪蓋就可以走人了。

  5、見名知意
  程式再小,用的變數也不會少,變數起名應當見名知意是個老話題了,好處是顯而易見的。推薦程式員使用“匈牙利命名法”,它會使你的起名工作變得輕而易舉,而且相當專業。

  6、對稱之美
  中國人講究對稱之美,用在編程裡也很合適,如果程式裡用到A迴圈嵌套B判斷,B判斷又包含C迴圈之類的結構,記著使用縮排法,讓A:ENDDO對齊A:DO,B:ENDIF對齊B:IF……諸如此類,依次縮排,總之對稱就等於美觀加易讀。

  7、多加註解
  對程式中自訂的變數、函數、子程式加以功能性的注釋說明,別嫌麻煩。如果過了三月五月,連自己寫的東西都看不明白了,那才大麻煩。

  8、環境保護
  如果應用程式需要修改系統設定,記著應用開始前先儲存設定,應用結束後要恢複設定,千萬別汙染環境。

  9、拿來主義
  一個人的力量是有限的,大家的力量是無限的,平時多看看別人的程式,如果碰巧有好的經驗,巧的方法,用得上的段子,不妨拿來。

  10、忍者無敵
  當你認為程式碼寫的“百分百”正確,而程式編譯執行百分百有毛病,你基本屬於暈菜的時候,千萬要忍,歇口氣,重頭來,別放棄!相信最終的勝利是屬於你的!

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

1.記錄集關閉之前再次開啟:
------------------------------------
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之前先關閉 rs.close

set rs1=server.createobject
rs1.open sql,conn,1,1

2,用SQL關鍵字做表名或欄位名
-------------------------------------
sql="select * from user"
rs.open sql,conn,1,1
-------------------------------------
user為sql關鍵字
解決:改為
sql="select * from [user]"


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

rs("userName")="aa"
rs.update
-------------------------------------
目前記錄集的開啟檔案為唯讀
解決:
改為
rs.open sql,conn,1,3

4,在查詢語句中採用的對比欄位值與欄位類型不符
-----------------------------------------
sql="select * from [user] where id='" & myID & "'"
rs.open sql,conn,1,1
-----------------------------------------
假設表中設計ID為數字型,那麼些時出錯。
解決:
sql="select * from [user] where id=" & myID

5,未檢查變數值而出錯
-----------------------------------------
sql="select * from [user] where id=" & myID
rs.open sql,conn,1,1
-----------------------------------------
假設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
-----------------------------------------
假設id為數字型,myID變數此時值不為null,但為字元,比如myID此時為"aa"
那麼sql將成為
sql="select * from [user] where id=aa"
解決:
在前面加上
if isnumeric(myID)=false then 出錯提示

這也可以有效防止 sql injection 漏洞攻擊。

7,由於資料庫檔案所在目錄的NTFS許可權而引起的'不能更新。資料庫或對象為唯讀"錯誤。
說明:
WIN2K系統延續了WINNT系統的NTFS許可權。
對於系統中的文夾都有預設的安全設定。
而通過HTTP對WWW訪問時的系統預設使用者是 iusr_電腦名稱 使用者 ,它屬於guest組。
當通過HTTP訪問時,可以ASP或JSP,也或是PHP或.NET程式對資料進行修改操作:
比如:
當開啟某一個文章時,程式設定,文章的閱讀次數=原閱讀次數+1
執行
conn.execute("update arts set clicks=clicks+1 where id=n")
語句時,如果 iusr_電腦名稱 使用者沒有對資料庫的寫入權限時,就會出錯.
解決方案:
找到資料庫所在目錄
右鍵》屬性》安全選項卡》設定 iusr_電腦名稱 使用者的寫入權限(當然,也可以是everyone)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.