推薦使用Microsoft 公司的Visual InterDev 來書寫ASP 代碼,使用Macromedia ? 公司的Dreamweaver 來書寫HTML代碼,也可以使用UltraEdit、ASPEdit 2000等開發(fā)工具。
1.2 縮進(jìn)空格
縮進(jìn)空格是指在每一級(jí)有兩到四個(gè)空格。不要在源代碼中保留TAB字符,這是因?yàn)門AB字符會(huì)隨著不同用戶的不同設(shè)置和不同的資源管理工具(打印、文檔、版本控制等)而代表不同的寬度。
1.3 數(shù)據(jù)合法性檢查
所有表單提交頁面中,表單上必須填寫項(xiàng)目和填寫項(xiàng)目中非法輸入的判斷都在頁面中用javascript在客戶端判斷,如果必須和服務(wù)器端數(shù)據(jù)比較才能判斷輸入項(xiàng)目是否正確不在此例。
所有提交的信息(GET方式及POST方式)都必須在服務(wù)器端重新進(jìn)行數(shù)據(jù)合法性校驗(yàn),并過濾非法字符(& ; ` ' / " | * ? ~ < > ^ ( ) [ ] { } $ /n /r),例如,將"'"替換成"''" (兩個(gè)單引號(hào))號(hào)(替換字符串的工作將統(tǒng)一使用公共的CheckInputString(str) 函數(shù));而對(duì)于數(shù)字型變量,要檢查輸入的數(shù)據(jù)是否全為數(shù)字(javascript中使用isFinite或isNaN, VbScript中使用IsNumeric)。
1.4 參數(shù)傳遞
建議使用POST方法,而不推薦使用GET方法;
嚴(yán)禁使用GET方法、SESSION或其它方式傳遞SQL語句;
禁止使用GET方式傳遞大量的查詢字符串,特別是未經(jīng)編碼的漢字,HTTP協(xié)議傳送表單域比查詢字符串效率要高,而且?guī)в幸粋€(gè)大的查詢字符串的頁面在某些瀏覽器上會(huì)失效;
禁止使用SESSION、COOKIE傳遞非會(huì)話期間必要的參數(shù)。
1.5 URL
包含頭文件,頁面的鏈接,提交的頁面,用到的圖片,如果引用的是如"include"、"image"等公共部分,必須使用絕對(duì)路徑,即以虛根目錄"/"開始的路徑,以提高運(yùn)行效率。例如:
6.4 使用最簡(jiǎn)單的游標(biāo)類型和記錄鎖定方式
在 ADO 中定義了四種不同的游標(biāo)類型:
l動(dòng)態(tài)游標(biāo)(adOpenForwardOnly) - 用于查看其他用戶所作的添加、更改和刪除,并用于不依賴書簽的 Recordset 中各種類型的移動(dòng)。如果提供者支持,可使用書簽。
l鍵集游標(biāo)(adOpenKeyset) - 其行為類似動(dòng)態(tài)游標(biāo),不同的只是禁止查看其他用戶添加的記錄,并禁止訪問其他用戶刪除的記錄,其他用戶所作的數(shù)據(jù)更改將依然可見。它始終支持書簽,因此允許 Recordset 中各種類型的移動(dòng)。
l靜態(tài)游標(biāo)(adOpenDynamic) - 提供記錄集合的靜態(tài)副本以查找數(shù)據(jù)或生成報(bào)告。它始終支持書簽,因此允許 Recordset 中各種類型的移動(dòng)。其他用戶所作的添加、更改或刪除將不可見。這是打開客戶端 (ADOR) Recordset 對(duì)象時(shí)唯一允許使用的游標(biāo)類型。
l僅向前游標(biāo)(adOpenStatic) - 除僅允許在記錄中向前滾動(dòng)之外,其行為類似動(dòng)態(tài)游標(biāo)。這樣,當(dāng)需要在 Recordset 中單程移動(dòng)時(shí)就可提高性能。
在打開 Recordset 之前設(shè)置 CursorType 屬性來選擇游標(biāo)類型,或使用 Open 方法傳遞 CursorType 參數(shù)。部分提供者不支持所有游標(biāo)類型。請(qǐng)檢查提供者的文檔。如果沒有指定游標(biāo)類型,ADO 將默認(rèn)打開僅向前游標(biāo)。
在 ADO 中定義了四種不同的游標(biāo)類型:
ladLockReadOnly - 默認(rèn)值,只讀。無法更改數(shù)據(jù)。
ladLockPessimistic - 保守式記錄鎖定(逐條)。提供者執(zhí)行必要的操作確保成功編輯記錄,通常采用編輯時(shí)立即鎖定數(shù)據(jù)源的記錄的方式。
ladLockOptimistic - 開放式記錄鎖定(逐條)。提供者使用開放式鎖定,只在調(diào)用 Update 方法時(shí)鎖定記錄。
ladLockBatchOptimistic - 開放式批更新。用于與立即更新模式相反的批更新模式。
打開 Recordset 前設(shè)置 LockType 屬性可指定打開時(shí)提供者應(yīng)該使用的鎖定類型。讀取該屬性可返回在打開的 Recordset 對(duì)象上正在使用的鎖定類型。Recordset 關(guān)閉時(shí) LockType 屬性為讀/寫,打開時(shí)該屬性為只讀。
在實(shí)際使用過程中應(yīng)該使用適合于處理任務(wù)的最簡(jiǎn)單的游標(biāo)類型和記錄鎖定方式。例如:
僅打開一個(gè)靜態(tài)的記錄集并輸出:
Rs.Open sql,Conn,0,1 ' adOpenForwardOnly, adLockReadOnly
打開的記錄集中有text類型的字段:
Rs.Open sql,Conn,1,1 'adOpenKeyset, adLockReadOnly
6.4 SQL字符串過濾
所有的字符串輸入框在向數(shù)據(jù)庫提交查詢、插入、刪除或修改一條記錄時(shí)必須用字符串過濾函數(shù)檢查,即:
字符型:復(fù)寫提交內(nèi)容中的"'"、"''"等(使用公共函數(shù)的CheckInputString()。),并檢查字符串的長(zhǎng)度是否超長(zhǎng)。
數(shù)值型:使用IsNumeric()判斷輸入是否為數(shù)字。
整 型:使用Int(), Fix(),Round() 截取其整數(shù)值。
日期型:使用isDate()函數(shù)判斷是否為正確的日期輸入。
6.5 SQL事務(wù)執(zhí)行
對(duì)數(shù)據(jù)庫操作的事務(wù)一般應(yīng)當(dāng)使用SQL的存儲(chǔ)過程執(zhí)行。對(duì)于需要在ASP頁面中執(zhí)行的數(shù)據(jù)庫操作,所有插入、刪除、修改數(shù)據(jù)庫不得使用RecordSet對(duì)象,必須使用Connect對(duì)象用SQL語句執(zhí)行,RecordSet只在執(zhí)行查詢時(shí)使用。所有檢索數(shù)據(jù)庫的操作禁止使用"SELECT * FROM …",而要使用"SELECT 字段一, 字段二, 字段三, … FROM…"。
6.6 ADO對(duì)象的關(guān)閉
所有連接數(shù)據(jù)庫頁面中,Connect和Recordset等ADO對(duì)象必須在用完后立即關(guān)閉(Close),然后將其對(duì)象釋放(Set ***=nothing)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注