夏 沅
一、引言 隨著人民銀行中心支行計算機網絡建設的逐步發展和內聯網二期工程的落實到位,多數中心支行已建立了內部網絡(Intranet),提供文件傳輸、電子郵件、及簡單WEB等相關網絡服務。 對于人民銀行中心支行而言,網站的建設需要報表、臺帳等各種數字信息,報告、分析等各種文字信息,公文處理、會議通知等各種辦公自動化信息,聲音、圖象、視頻會議等各種多媒體信息。而如何充分利用現有信息資源和計算機網絡技術,建設人民銀行內部的信息網站,為金融監管和政策給予及時、準確、多樣的信息服務,很大程度上離不開數據庫的支持。同時,人民銀行網站的建設是一項系統工程和標志性工程,它代表一個行的形象,體現科技興行的精神。建設和維護網站涉及的部門眾多,需要協調的關系很多,技術復雜程度高,這就迫切需要利用數據庫技術建設一個動態的、交互的、高效的網站來滿足信息化時代的要求。 數據庫存儲過程(Stored-Procedure)是諸如SYBASE、ORACLE、INFORMIX、MICROSOFT SQLSERVER等大型數據庫一種成熟的技術,是由一些或多個SQL語句和控制語句組成的被封裝起來的過程,它駐留在數據庫中,可以被客戶應用程序調用,也可以從另一個過程或觸發器調用。通過使用變量和條件,它的參數可以被傳遞和返回。在B/S(瀏覽器/服務器)模式中,網站的客戶端在執行復雜的任務,處理大而復雜的SQL語句時,存儲過程提供了諸多方便之處和優點,能夠滿足網站建設的需要。 二、采用存儲過程的優點 1、運行速度加快 在網站數據庫服務器中,一般交互式的SQL命令,每次執行前數據庫服務器都要為其建立預編譯的過程,而存儲過程在第一次執行之后,經過了優化和編譯好的過程,儲存在高速緩存之中,在接下來的運行中可以直接從高速緩存中執行,省去了以后執行的優化和編譯階段,節省了執行過程的大量時間,使用存儲過程從而加快了執行速度。 2、網絡負荷減少 當客戶端發出執行存儲過程的請求時,只有執行存儲過程的命令在內部網絡上傳送,當它們到達數據庫服務器時,運行存儲過程,客戶端在網上只接收返回結果或狀態信息,所以使得客戶機與服務器的通訊量降至最小,大大減少了網絡負荷。縮短了用戶要求的相應時間,避免了用戶枯燥的等待。 3、團隊開發方便 網站程序編制過程中,PHP、ASP等調用存儲過程能夠減少在程序開發中構造復雜SQL語句的難度,由于存儲過程的可重用、可共享性,使得存儲過程可被多處重復使用,也可以被多個用戶共享,在開發中反復使用,給網站的團隊開發帶來了極大的方便,而且使站點更易于維護和更新。 4、安全機制放心 存儲過程本身有很強的安全機制,只有具有相應的系統權限才能夠調用相應的存儲過程,或者只訪問存儲過程而不能夠訪問其中涉及的表或視圖,只通過存儲過程中所給出的功能來間接操作數據庫。在存儲過程的代碼中可以包含對信息和數據的合法性檢查、對業務規則要求的各種完整性檢查等,這無疑給那些安全性較差的網站平臺帶來了福音。 5、服務用戶滿意 存儲過程可以充分利用數據視點集中的原則,使用戶把注意力集中在所關心的數據上、簡化用戶的數據查詢操作、使不同的用戶能夠多角度“看待”同一數據,能夠用存儲過程建立非常復雜的查詢,以非常復雜的方式更新(update、delete、select、insert)數據庫。同時存儲過程能夠自動對復雜或敏感的事務處理,對某些表進行各種處理,可以保證這些表的數據完整性。這樣做,滿意了用戶。 三、調用存儲過程的方法 下面以某中心支行金融信息港用戶信息發布登錄模塊為例,結合實際開發工作中的一些經驗說明如何調用存儲過程 1、網站平臺服務器端為WinNT4.0、SERVERPACK5、IIS5.0,ASP應用程序,MS SQL SERVER7.0為后臺數據庫 2、相關表Department中保存了單位號(Dep_id)單位名稱(Dep_name)和密碼(Dep_passwd)。 3、實現功能用戶從下拉菜單中選擇用戶名稱,輸入密碼,登錄。如果有單位用戶擁有指定的密碼,輸出參數將返回“pass",否則,返回“Invalid"。 4、實例說明 (1)存儲過程sp_CheckPwd,檢查用戶是否輸入了合法的密碼,建立存儲過程,可以從Microsoft SQL Sever程序組中啟動ISQL/w。然后,在查詢窗口中輸入存儲過程。 (2)用戶登錄界面login.asp,使用通常的SQL語句和使用存儲過程進行對比。 (3)檢驗密碼是否正確Checklogin.asp,在其中,使用定義的存儲過程。 (4)數據庫連接文件conn.asp 5、實例 (1)/*存儲過程實例*/ CREATE PROCEDURE sp_CheckPwd @CHKDepid VARCHAR(30),@CHKPass VARCHAR(30), @ISValid CHAR(8) OUTPUT AS IF EXISTS(SELECT Dep_id FROM Department WHERE Dep_id=@CHKDepid AND Dep_passwd=@CHKPass) SELECT @ISVaid="pass" ELSE SELECT @ISValid="Invalid" /*存儲過程接收兩個輸入參數。輸入參數@CHKDepid向存儲過程傳遞一個單位ID號。@CHKPass向存儲過程傳遞一個單位用戶密碼。如果表中存在這個單位ID號和密碼組合,則輸出參數將返回“pass",否則,返回“Invalid" */ (2)//login.asp // 用戶登錄界面 <!--#include file="conn.asp"--> '包含數據庫連接定義的文件 <html> <head><title>單位用戶登錄</title></head> <body> <% dim rs,dept_sql set rs=server.createobject("adodb.recordset") '創建記錄集 dept_sql="select dep_id,dep_name from Department " '使用標準SQL語句,將所有的單位ID號和單位用戶的名稱取回到客戶端 rs.open dept_sql,conn,1,1 %> <form method="post" action="chklogin.asp" name="frmNewDepartment"> 單位用戶名: <select name=" DepartmentId " size="1"> <% do while not rs.eof response.write"<option value='"+cstr(rs("dep_id"))+"'>"+rs("dep_name")+"</option>"+chr(13)+chr(10) rs.movenext loop %> '建立列表對象,顯示單位名稱,返回單位ID值 </select> 密 碼: <input type="password" name=" DepartmentUserPwd "> <input type="submit" name="Submit1" value="確定"> <input type="reset" name="Submit2" value="重寫"> </form> </body> </html> (3)//Checklogin.asp //檢驗登錄的單位用戶的合法性,返回值。同時調用存儲過程sp_CheckPwd <!--#include file="conn.asp"--> '包含數據庫連接定義的文件 < % Set cmdTemp=Sever.CreateObject("ADODB.Command") '建立命令對象 Set cmdTemp.ActiveConnection=Conn '把命令和打開的連接聯系起來 cmdTemp.CommandType=adCMdStoredProc '指定要執行的是一個存儲過程 cmdTemp.CommandText="sp_CheckPwd" '引用存儲過程指定名稱 Set tmpFirstParam =cmdTemp.CreateParameter ("DepartmentUserPwd",adVarChar,adParamInput,30) '創建輸入參數對象,命令對象的CreateParameter()方法建立輸入參數,同理可以建立輸入參數對象DepartmentId,對象的方法帶有四個參數,需要注意區別 Set tmpThirdParam=cmdTemp.CreateParameter ("RetValue",adChar,adParamOutput,8) '創建返回參數對象 cmdTemp.Parameters.Append.tmpFirstParam '把第一個參數追加到參數集合中,同理依次追加其他參數到集合中 cmdTemp("DepartmentId ")=Request.FORM("DepartmentId ") '取得輸入參數,從請求的login.asp的 FORM中獲得 cmdTemp("DepartmentUserPwd ")=Request.FORM("DepartmentUserPwd ") cmdTemp.Execute '調用Execute方法執行存儲過程 % > The Check Result is < %=cmdTemp("RetValue")% > '輸出返回值,這是最為簡單的應用,在實際中可以根據需求,進行相應開發 < % DataConn.Close '關閉數據庫連接 % > (4)//conn.asp //數據庫連接定義文件 <% dim conn dim connstr set conn=server.createobject("ADODB.CONNECTION") '建立連接對象 connstr="driver={SQL Server};server=xx.xxx.xx.xx;uid=fzxxg_user;pwd=;database=fzxxg" '與數據庫建立連接,服務器的IP地址,用戶名稱fzxxg_user,口令為空,數據庫名稱為fzxxg conn.open connstr %> 四、結束語 人民銀行網站的建設為新世紀的銀行業帶來了巨大的發展機遇并提供了廣闊的舞臺,Intranet在我們的社會中將扮演多種角色,各種Intranet的技術將備受關注。本文中,調用數據庫存儲過程可以建立一個交互式的、高效率的網站,是一種實用技術。但它只是網站建設技術的冰山一角,相信以TCP/IP協議作為基礎,以WEB為核心應用,以后臺數據庫為支持模型的大型復雜高效率的站點建設是發展趨勢和必然。
|