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