讀書筆記文檔 (8).doc_第1頁
讀書筆記文檔 (8).doc_第2頁
讀書筆記文檔 (8).doc_第3頁
讀書筆記文檔 (8).doc_第4頁
讀書筆記文檔 (8).doc_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

常熟理工學(xué)院本科班畢業(yè)設(shè)計(論文)讀書筆記讀書筆記(一)摘自:閃四清編著,SQL Server 2000實用教程2000年12月第1版 人民郵電出版社1.SQL Server 存儲過程管理技術(shù)存儲過程的概念 存儲過程是存儲在服務(wù)器上的一組預(yù)編譯的Transact-SQL語句。存儲過程是一種封裝重復(fù)任務(wù)操作的方法,支持用戶提供的變量,具有強大的編程功能。存儲過程可以在服務(wù)器上的SQL Server環(huán)境下運行,這可以帶來許多好處。從性能方面講,由于存儲過程是在服務(wù)器上運行的,而服務(wù)器通常是一種功能強大的機器,它的執(zhí)行時間要比在工作站中的執(zhí)行時間短得多。另外,由于數(shù)據(jù)庫信息已經(jīng)物理的在同一系統(tǒng)中準備好,因此就不必等待記錄通過網(wǎng)絡(luò)傳遞進行處理。相反,存儲過程具有對數(shù)據(jù)庫立即的、準備好的訪問、這使得信息的處理非常迅速。從客戶機/服務(wù)器開發(fā)方面來看,將客戶端和服務(wù)器端的開發(fā)任務(wù)的開發(fā)任務(wù)分離,有時可減少完成項目的需要時間。用戶可以獨立的開發(fā)服務(wù)器端組件而不涉及客戶端,但是可以在客戶端的應(yīng)用程序中間重復(fù)使用服務(wù)器端組件。存儲過程可以返回值、修改值,將系統(tǒng)預(yù)請求的信息與用戶提供的值進行比較。在一般的SQL Server配置情況下,存儲過程可以快速運行。用戶還可以向存儲過程傳遞值,存儲過程也可以返回表中的值,這些值在存儲過程運行期間可以參加運算。存儲過程的優(yōu)點1 與其他應(yīng)用程序共享應(yīng)用程序的邏輯,因此確保一致的數(shù)據(jù)訪問和操縱。存儲過程可以封裝企業(yè)的功能模塊,在存儲過程中封裝的企業(yè)的功能模塊,也稱為商業(yè)規(guī)則或者商業(yè)策略,可以只在一個地方修改維護。所有的客戶機程序可以使用同一個存儲過程進行各種操作,從而確保數(shù)據(jù)修改的一致性。2 提供一種安全機制。如果用戶被授予執(zhí)行存儲過程的權(quán)限,那么即使是該用戶沒有執(zhí)行訪問在該存儲過程中所參考的表或者視圖的權(quán)限,該用戶也可以完全執(zhí)行該存儲過程,而不會受到影響。因此,可以創(chuàng)建存儲過程來完成所有的增加,刪除等操作,并且可以通過編程方式控制上述操作中對信息的訪問。3 如果把系統(tǒng)存儲過程sp_procoption設(shè)置為true,那么可以在系統(tǒng)啟動時,自動存儲過程。這樣,可以自動完成一些需要預(yù)先操作的任務(wù),而不必在系統(tǒng)啟動之后再進行手工操作。4 由于存儲過程在第一次執(zhí)行之后,其執(zhí)行規(guī)劃就存儲在高速緩沖存儲器中。在以后的操作中,只需要從過程高速緩沖存儲器中調(diào)用編譯好的存儲過程的二進制形式來執(zhí)行,因此可以加速存儲過程的執(zhí)行,提高系統(tǒng)的性能。5 減少網(wǎng)絡(luò)交通。這是一條非常重要的使用存儲過程的原因。如果有1000條SQL語句的命令,一條一條的通過網(wǎng)絡(luò)在客戶機和服務(wù)器之間傳送,那么這種傳輸所耗費的時間長得使世界上最有耐心的人也無法忍受。但是,如果把這1000條SQL語句的命令寫成一條較為復(fù)雜的存儲過程命令,這時在客戶機和服務(wù)器之間的網(wǎng)絡(luò)傳輸就會大大減少所需的時間。存儲過程的類型 在SQL Server 2000關(guān)系型數(shù)據(jù)庫管理系統(tǒng)中,支持5種類型的存儲過程:系統(tǒng)存儲過程、本地存儲過程、臨時存儲過程、遠程存儲過程和擴展存儲過程。執(zhí)行存儲過程技術(shù)存儲過程的執(zhí)行技術(shù)包括創(chuàng)建存儲過程和執(zhí)行存儲過程。當?shù)谝淮螆?zhí)行存儲過程時,存儲過程的執(zhí)行規(guī)則放在過程高速緩沖存儲區(qū)中。過程高速緩沖存儲區(qū)是一塊內(nèi)存緩沖區(qū),這塊緩沖區(qū)是SQL Server用來存儲已經(jīng)編譯的查詢規(guī)劃以便執(zhí)行存儲過程的地方。當存儲過程創(chuàng)建之后,系統(tǒng)檢查其中語句的正確性。語法檢查之后,系統(tǒng)將存儲過程的名稱存儲在當前數(shù)據(jù)庫的系統(tǒng)表sysobjects中,將存儲過程的文本存儲在當前數(shù)據(jù)庫的系統(tǒng)表syscomments中。在存儲過程的創(chuàng)建過程中,如果碰到語法錯誤,那么存儲過程創(chuàng)建失敗。在存儲過程創(chuàng)建過程中,被稱為延遲的名稱解決方案允許存儲過程參考還不存在的對象。但是,在執(zhí)行存儲過程的時候,這些對象必須存在。當存儲過程第一次執(zhí)行的時候,或者當存儲過程必須重新編譯的時候,查詢處理器閱讀在解決方案進程中的存儲過程。在下列環(huán)境中,存儲過程重新編譯:1 無論何時模式版本改變的時候,例如,表或者索引修改的時候;2 當存儲過程編譯時的環(huán)境與該存儲過程執(zhí)行時的環(huán)境不同的時候;3 當存儲過程所參考的表或者索引的統(tǒng)計發(fā)生改變的時候。當存儲過程成功的通過解決方案階段時,系統(tǒng)的查詢優(yōu)化器分析在存儲過程中的Transact-SQL語句,然后創(chuàng)建包含訪問數(shù)據(jù)最快的規(guī)劃。為了做到這些,查詢優(yōu)化器必須考慮下列因素:1 表中的數(shù)據(jù)量;2 是否有索引以及表索引的特點和索引列中的數(shù)據(jù)分布;3 在where子句的條件中使用的比較運算符和比較值;4 是否出現(xiàn)連接和UNION、GROUP BY、ORDER BY等字句。編譯是指分析存儲過程和執(zhí)行查詢規(guī)劃的進程。當查詢優(yōu)化器把已經(jīng)編譯的規(guī)劃放在過程高速緩沖存儲器之后,執(zhí)行存儲過程。當在第一次執(zhí)行存儲過程之后再執(zhí)行存儲過程的時候,其速度快于第一次的執(zhí)行速度,這是因為系統(tǒng)使用了過程高速緩沖存儲器中的已經(jīng)優(yōu)化的查詢規(guī)劃。創(chuàng)建存儲過程技術(shù)創(chuàng)建存儲過程的步驟類似于創(chuàng)建視圖的步驟。只能在當前數(shù)據(jù)庫中創(chuàng)建存儲過程。首先,編寫和測試用來創(chuàng)建過程的Transact-SQL語句。然后,如果得到了預(yù)想的結(jié)果,那么就可以真正創(chuàng)建存儲過程。創(chuàng)建存儲過程有三種方法:1 使用create procedure語句;2 使用create stored procedure wizard向?qū)В? 使用SQL Server Enterprise Manager。創(chuàng)建存儲過程可以使用create procedure語句。當創(chuàng)建存儲過程的時候,要考慮下列一些因素:1 存儲過程可以參考表、視圖和存儲過程,還可以參考臨時表;2 如果存儲過程創(chuàng)建了臨時表,那么該臨時表只能用于存儲過程,并且當存儲過程執(zhí)行完畢時,臨時表消失;3 在一個批次中,create procedure語句不能與其他的Transact-SQL語句混合使用;4 在create procedure語句的定義中,可以包括任意數(shù)量和類型的Transact-SQL的語句,但是下面的對象創(chuàng)建語句不能使用; create default create procedure create rule create trigger create view5 只有具有create procedure權(quán)限,或者是下列角色的成員,才能執(zhí)行create procedure語句; System Administrators(sysadmin) Database owner(db_owner) Data definition language administrator(db_ddladmin)6 存儲過程可以嵌套,即一個存儲過程調(diào)用另外一個存儲過程。存儲過程最多可以嵌套32層。當前的嵌套層的數(shù)據(jù)值存儲在全局變量nestlevel中。如果第一個存儲過程調(diào)用第二個存儲過程,那么第二個存儲過程可以調(diào)用第一個存儲過程所創(chuàng)建的全部對象,包括臨時表。Create procedure語句語法形式如下:Create procedure procedure_name;number(parameter data_type=defaultoutput),nwithrecompile|encryption|recompile,encryptionas sql_statement存儲過程的執(zhí)行技術(shù) 只有具有存儲過程的執(zhí)行權(quán)限execute,才可以執(zhí)行存儲過程。執(zhí)行存儲過程有兩種方法。一種方法是直接執(zhí)行存儲過程,另外一種方法是在insert語句中執(zhí)行存儲過程。直接執(zhí)行存儲過程就是調(diào)用execute語句來執(zhí)行存儲過程。在執(zhí)行存儲過程的時候,需要提供存儲過程的名稱和存儲過程所需要的參數(shù)。Execute語句的語法形式如下:execute return_status= procedure_name;number|procedure_name_var parameter=value|variableoutput|default,n with recompile使用參數(shù)執(zhí)行存儲過程通過在存儲過程中使用參數(shù),可以擴展存儲過程的功能。使用參數(shù)既可以把外部信息傳輸?shù)酱鎯^程中,也可以把存儲過程內(nèi)的信息傳輸?shù)酵獠恳怨┦褂?。這樣,就允許使用同一個存儲過程多次搜索數(shù)據(jù)庫,因此可以避免為每一個需要的值提供一個的存儲過程。SQL Server支持兩種類型的參數(shù):輸入?yún)?shù)和輸出參數(shù)。一 使用輸入?yún)?shù)的技術(shù)輸入?yún)?shù)允許把外部信息傳輸?shù)酱鎯^程中。為了定義一個接收輸入?yún)?shù)的存儲過程,必須在創(chuàng)建存儲過程的時候,根據(jù)實際情況,在create procedure語句中聲明一個或者多個變量。參數(shù)聲明的語法形式如下:parameter data_type=default 當在create procedure語句中聲明一個或者多個變量的時候,應(yīng)該考慮下面規(guī)則和因素:1 所有輸入?yún)?shù)都應(yīng)該在創(chuàng)建存儲過程的時候進行檢查,以便發(fā)現(xiàn)減少錯誤和改正2 應(yīng)該為某一個輸入?yún)?shù)提供一個缺省值。如果在存儲過程中定義了一個缺省值,那么執(zhí)行該存儲過程的時候,可以不為該參數(shù)指定值。參數(shù)的缺省值必須是常量或者NULL3 在存儲過程中,參數(shù)的數(shù)量不能超過255個4 根據(jù)機器可以使用的內(nèi)存,在存儲過程中的本地變量和全局變量受到一定的限制5 參數(shù)只是針對一個存儲過程而言,因此同一個參數(shù)名稱可以使用在不同的存儲過程中。存儲過程的參數(shù)信息存儲在系統(tǒng)表syscolumns中。二 用輸入?yún)?shù)執(zhí)行存儲過程的技術(shù) 為了把輸入?yún)?shù)的數(shù)值傳送到存儲過程中,可以使用兩種方法。一種方法是根據(jù)參數(shù)名稱來指定,另外一種方法是根據(jù)參數(shù)的位置來指定。但是,當執(zhí)行一個存儲過程的時候,只能任意選擇一種輸入?yún)?shù)的方法,不能把兩種方法混合在一起使用。1 根據(jù)參數(shù)名稱來指定輸入?yún)?shù)根據(jù)參數(shù)名稱來指定輸入?yún)?shù)就是在execute語句中使用格式parameter=value來指定輸入的參數(shù)。當使用這種方法指定參數(shù)的時候,參數(shù)的順序可以是任意的順序,并且對于允許為空的參數(shù)或者有缺省值的參數(shù),可以省略。根據(jù)參數(shù)名稱來指定輸入?yún)?shù)的語法形式如下:execute procedure_nameparameter=valueparameter=value2 根據(jù)參數(shù)的位置來指定輸入?yún)?shù)根據(jù)參數(shù)的位置來指定輸入?yún)?shù)就是只提供數(shù)值。當只提供數(shù)值時,這些數(shù)值的順序必須與在創(chuàng)建存儲過程語句中的參數(shù)順序完全一致。當根據(jù)參數(shù)的位置來指定輸入?yún)?shù)時,可以忽略有缺省值的參數(shù),但是不能破壞參數(shù)的順序。例如,如果某一個存儲過程有5個參數(shù),那么可以忽略第4個參數(shù)和第5個參數(shù),但是不能僅忽略第4個參數(shù)而指定第5個參數(shù)。根據(jù)參數(shù)的位置來指定輸入?yún)?shù)語句的語法形式如下:execute procedure_namevalue,value3 用輸出參數(shù)返回值的技術(shù)存儲過程可以把信息返回到調(diào)用存儲過程的應(yīng)用程序中或者返回到有輸出參數(shù)的客戶機程序中。為了使用輸出參數(shù),必須在create procedure語句和execute語句中指定關(guān)鍵字output。如果沒有指定關(guān)鍵字output,那么當執(zhí)行該存儲過程的時候,存儲過程仍然可以執(zhí)行,但是會產(chǎn)生一個錯誤消息。輸出參數(shù)具有下列一些特點:1 在調(diào)用存儲過程的語句中,必須包含一個可以接收返回值的變量;2 在同一個批文件中的其他Transact-SQL語句中或者在調(diào)用存儲過程中,使用這個接收返回值的變量;3 如果以與存儲過程定義中參數(shù)順序的不同順序指定參數(shù),那么參數(shù)必須使用參數(shù)名稱傳送;4 參數(shù)的數(shù)據(jù)類型可以是除text、ntext和image類型之外的任意數(shù)據(jù)類型。感想:看了有關(guān)存儲過程的內(nèi)容后,我決定在系統(tǒng)中使用存儲過程,提高系統(tǒng)的運行效率。(二)摘自:肖金秀主編ASP網(wǎng)絡(luò)編程技術(shù)2001年10月第1版 清華大學(xué)出版社Command對象 ADO的Recordset對象是用來記錄由數(shù)據(jù)庫數(shù)據(jù)庫所取得的數(shù)據(jù)庫對象,Connection對象則提供客戶端應(yīng)用程序與數(shù)據(jù)庫之間的聯(lián)絡(luò)管道,而Command對象所擔任的是整個應(yīng)用系統(tǒng)的“信息傳遞”角色,它必須對數(shù)據(jù)庫提出數(shù)據(jù)查詢信息。如果精通SQL語句的寫法,那么一定了解它的強大功能,有時可能需要在SQL中加入?yún)?shù)甚至返回值。我們可以利用存儲過程的概念編寫自己的子程序,并在Command對象調(diào)用使用。Command對象內(nèi)擁有Parameters數(shù)據(jù)集合以記錄存儲過程中所定義的參數(shù)及參數(shù)值。1 建立Command對象Command對象主要的用途是執(zhí)行Action Query指令。類似于使用Visual Basic Script建立一個Command對象同樣是使用Server.CreateObject()的方法。用CreateObject方法建立Command對象之后,還要將Command對象的ActionConnection屬性設(shè)置成某一個Connection對象。這樣Command對象才能夠被用來操作Connection對象所連接的數(shù)據(jù)庫。程序如下:Set conn=server.createobject(“ADODB.Connection”)Connstr=”provider=sqloledb; data source=yinson;uid=sa;pwd=;database=website”conn.open connstrset cn.activeConnection=connsqlstr=”select * from t_member”mandtext=sqlstrset rs=cn.execute2 Command對象屬性(1)ActiveConnection 使用ActiveConnection屬性可確定在其上將執(zhí)行指定Command對象或打開指定Recordset的Connection對象。(2)CommandText該對象為SQL語句,但也可以是提供者識別的任何其他類型的命令語句(如存儲的過程調(diào)用)。如果設(shè)置CommandText屬性時將Command對象的Prepared屬性設(shè)置為true,并將Commmand對象綁定到打開的連接,則在調(diào)用execute或open方法時ADO將準備查詢。(3)CommandTimeout使用Connection對象或Command上的CommandTimeout屬性,允許由于網(wǎng)絡(luò)擁塞或服務(wù)器負載過重產(chǎn)生的延遲而取消execute方法調(diào)用。如果在CommandTimeout屬性中設(shè)置的時間間隔內(nèi)沒有完成命令執(zhí)行,將產(chǎn)生錯誤,然后ADO將取消該命令。如果將該屬性設(shè)置為零,ADO將無限期等待直到命令執(zhí)行完畢。請確保正在寫入代碼的提供者和數(shù)據(jù)源支持CommandTimeout功能。(4)CommandType使用CommandType屬性可優(yōu)化CommandText屬性的計算。如果CommandType屬性的值等于adCmdUnknown(默認值),系統(tǒng)的性能將會降低,因為ADO必須調(diào)用提供者以確定CommandText屬性是SQL語句,存儲過程或表格名稱。如果知道正在使用的的命令的類型,可通過設(shè)置CommandType屬性指令A(yù)DO直接轉(zhuǎn)到相關(guān)代碼。如果CommandType屬性與CommandText屬性中的命令類型不匹配,調(diào)用execute方法時將產(chǎn)生錯誤。adExecuteNoRecords常量通過最小化內(nèi)部處理來提高性能。該常量不獨立使用,它總是與adCmdText或adCmdStoredProc組合使用。如果與Recordset.open一起使用adExecuteNoRecords,或者該方法使用Command對象都將產(chǎn)生錯誤。(5)Prepared缺省Prepared屬性為true。可是,也可以設(shè)置這個屬性為false來禁止查詢的“準備“。在這種情況下,該查詢執(zhí)行時使用SQLExecDirect API。當ODBC接口給遠程服務(wù)器提交一個查詢時,或者直接給該服務(wù)器提交這個查詢,或者創(chuàng)建一個存儲過程執(zhí)行該操作。創(chuàng)建一個存儲過程會延緩初始化操作,但可提高所有隨后的對該查詢進行引用的性能。不過,有些查詢不能在存儲過程的窗體中執(zhí)行。此時,必須設(shè)置該Prepared屬性為false。3 Command對象方法Command對象有兩種方法,分別是CreateParameter與Execute(1)CreateParameter使用CreateParameter方法可用指定的名稱、類型、方向、大小和值創(chuàng)建新的Parameter對象。在參數(shù)中傳送的所有值都將寫入相應(yīng)的Parameter屬性。該方法無法自動將Parameter對象追加到Command對象的Parameter集合,這樣就可以設(shè)置附加屬性。如果將Parameter對象追加到集合,則ADO將使該附加屬性的值生效。如果在Type參數(shù)中指定可變長度的數(shù)據(jù)類型,那么在將它追加到Parameters集合之前必須傳送size參數(shù)或者設(shè)置Parameter對象的size屬性,否則將產(chǎn)生錯誤。使用語法:Set parameter=command.CreateParameter(Name,Type,Direction,Size,Value)(2)Execute 推薦只對動作查詢使用Execute方法。因為動作查詢不返回任何行,所以execute不返回rdoResultset。可以對執(zhí)行多語句的查詢使用Execute方法,這些批語句都不能返回行。為了執(zhí)行組合操作和select查詢的多結(jié)果集查詢,使用OpenResultset方法。4 Command對象的Parameters數(shù)據(jù)集合Command對象具有由Parameter對象組成的Parameters集合。使用Command對象的Parameters集合的Refresh方法,可以為在Command對象中指定的存儲過程中指定的的存儲過程或參數(shù)化查詢,檢索提供者的參數(shù)信息。某些提供者不支持存儲過程調(diào)用或參數(shù)化的查詢,使用此方法的提供者,在調(diào)用Parameters集合的Refresh方法將返回錯誤。如果調(diào)用Refresh方法前沒有定義自己的Parameter對象而訪問Parameters集合,ADO將自動調(diào)用該方法并填充該集合。如果知道要調(diào)用的存儲過程或參數(shù)化查詢的屬性,可以最小化對提供者的調(diào)用以提高性能。使用CreateParameter方法可以創(chuàng)建具有適當屬性設(shè)置的Parameters對象,使用Append方法可以將其添加到Parameters集合。這將允許用戶設(shè)置并返回參數(shù)值而不必調(diào)用參數(shù)信息的提供者。如果正在寫入不提供參數(shù)信息的提供者,則必須使用此方法手工填寫Parameters集合才能使用參數(shù)。如果必要可以使用delete方法將Parameters對象從Parameters集合中刪除。(1)Parameters數(shù)據(jù)集合屬性 Count屬性 使用Count屬性可確定給定集合中對象的數(shù)目。 因為集合成員的編號從零開始,因此應(yīng)該始終以零成員開頭且以Count屬性的值減1結(jié)尾而進行循環(huán)編碼。并想在不使用Count屬性的情況下在集合的成員中循環(huán)操作,請使用for eachnext命令。如果Count屬性為零,集合中將不存在對象。(2)Parameters數(shù)據(jù)集合方法1)Append在集合上使用Append方法可將對象添加到該集合,此方法僅在Command對象的Parameters集合上有效。在將Parameter對象追加到Parameters集合中之前必須設(shè)置其Type屬性。如果選定了變長數(shù)據(jù)類型,則必須將size屬性設(shè)置為大于零的值。通過對參數(shù)作出說明,可最大程度的減少對提供者的調(diào)用,從而在使用存儲過程或參數(shù)化查詢時提高性能。但必須了解與所要調(diào)用的存儲過程或參數(shù)化查詢相關(guān)聯(lián)的參數(shù)屬性。使用CreateParameter方法可創(chuàng)建具有適當屬性設(shè)置的Parameter對象,而使用Append方法則可將它們添加到Parameters集合。這樣可以不必調(diào)用參數(shù)信息的提供者而設(shè)置和返回參數(shù)值。如果寫到不提供參數(shù)信息的提供者,則必須使用該方法手工填寫Parameters集合以便能夠完全使用參數(shù)。使用語法:collection.Append object2)delete使用集合上的delete方法可刪除集合中的某個對象。該方法只對Command對象的Parameters集合有效。在調(diào)用delete方法時必須使用Parameter對象的Name屬性或它的集合索引對象變量是無效參數(shù)。使用語法:Parameters.delete index3)Item使用Item方法返回集合中的特定對象。如果方法無法在對應(yīng)于index參數(shù)的集合中找到對象,將產(chǎn)生錯誤。同時,某些集合不支持已命名的對象,對于這些集合,必須使用順序號引用。使用語法:set object=collection.Item(index)4)RefreshRefresh方法根據(jù)從中調(diào)用的不同集合而完成不同的任務(wù)。使用語法:collection.refresh(3)Parameter屬性Parameter屬性相當于Recordset對象內(nèi)的子對象Field,Connection對象內(nèi)的子對象Parameter。1)Attributes對于Parameter對象,Attributes屬性為讀/寫,并且其值可能為以下任意一個或多個ParameterAttributesEnum值的和。2)Direction使用Direction屬性可指定向過程傳遞參數(shù)或從過程傳遞參數(shù)的方式。Direction屬性為讀/寫;該屬性允許使用不返回該信息的提供者,或者在不希望ADO為了獲取參數(shù)信息而附加調(diào)用提供者時設(shè)置該信息。并非所有的提供者都可以在其存儲過程中確定參數(shù)方向。在此情況下,在執(zhí)行查詢前必須設(shè)置Direction屬性。adParamUnknown:指示參數(shù)方向為未知adParamInput:默認值,指示輸入?yún)?shù)。adParamOutput:輸出參數(shù)。adParamInputOutput:指示為輸入?yún)?shù)和輸出參數(shù)。adParamReturnValue:指示為返回值。(4)StoredProcedure在討論StoredProcedure之前,還要對Command對象的execute方法的作用進行一下闡述,通常使用Command的execute方法有三個目的。1 用于進行一些簡單的處理。例如刪除一條記錄:comm.CommandType=adCmdTextcomm.CommandText=”delete from employee where job_id=1”comm.execute2 用于進行一些復(fù)雜的處理這類一般都于StoredProcedure一同工作,而且有輸出參數(shù)和輸入?yún)?shù)。3 用于返回一個RecordSet對象用于其他的處理,例如:comm.CommandType=adCmdTextcomm.CommandText=”delete from employee where job_id=1”set rs=comm.executedim Iwhile not rs.eof for I=0 to rs.fileds.count-1 response.write rs.fileds.item(I).value&”,” nextresponse.write”rs.movenext wend SoredProcedure是一個預(yù)先存儲的數(shù)據(jù)庫執(zhí)行動作集,在SQL的管理結(jié)構(gòu)中,對于一個數(shù)據(jù)庫下有幾個部分,一個是數(shù)據(jù)表的集合,一個是StoredProcedure的集合。將兩者結(jié)合可以完成許多強大的功能。StoredProcedure其實是對傳統(tǒng)的SQL語句的一種擴展,主要是在參數(shù)的輸入與輸出上。 StoredProcedure的標準寫法: Create Procedure Procedure_name Define parameter As SQL Structure 上面的語法結(jié)構(gòu)中,Procedure_Name為存儲過程的名字,也是將在Command中引用的名字。然后是定義輸出和輸入的參數(shù)。最后是一個SQL結(jié)構(gòu)化語句。下面是一個StoredProcedure的例子,它無需輸入的參數(shù),也沒有輸出。Create Procedure Del_UserAs Delete from Employee where job_id=1如果要刪除指定的job_id,這時需要給這個StoredProcedure輸入的參數(shù)。Create Procedure Del_User1 intJob intas delete from Employee where job_id= intJob這里的intJob就是一個輸入的參數(shù),它可以從外部接受輸入的值,下面是給intJob輸入?yún)?shù)的asp程序:set conn=server.createobject(“adodb.connection”)set comm=server.createobject(“mand”)conn.connectionString=”driver=SQL Server;Server=ser;”&_“uid=sa;pwd=;database=employee”conn.opencomm.ActiveConnection=conncomm.CommandType=adCmdStoredProccomm.CommandText=”Del_User1”param=comm.createParameter(“ID”,adint,adparamInput,4)param.value=1comm.parameters.append paramcomm.execute這樣便可以向StoredProcedure傳遞參數(shù)了。有時在一個StoredProcedure中,還存在有輸出的參數(shù),下面是一個返回一個由Job_ID確定Fri_Name的值的例子。Create Procedure Get_fName intID int fName varChar Output 說明為輸出的參數(shù) as select fName=Fri_Name where Job_ID=intID它相應(yīng)的asp程序也要改寫為下面的形式: set conn=server.createobject(“adodb.connection”) set comm=server.createobject(“mand”) conn.connectionString=”Driver=SQL Server;Server=ser;”&_“uid=sa;pwd=;database=employee“ conn.open comm.ActiveConnection=conn comm.CommandType=adCmdStoredProccomm.CommandText=”Get_fName”param=comm.createparameter(“ID”,adint,adparaminput,4)param.value=2comm.Parameters.append paramparam=comm.createParameter(“fName”,adVarchar,adparamoutput,255,”)comm.parameters.append paramcomm.executeresponse.write “Job_id 為”¶m(0)&”的員工的姓名”¶m(1)感想:通過閱讀上述內(nèi)容,我對asp中的存儲過程調(diào)用的基本語法結(jié)構(gòu)有了系統(tǒng)而全面的認識。(三)摘自:/web/asp/index1/31.htmADO的定義ADO是一個相當簡單的思想,一種讓你僅用一種方式去訪問數(shù)據(jù)的思想。ADO不算一個新思想,僅是采用現(xiàn)有的數(shù)據(jù)庫訪問技術(shù),并將其融合而形成的一種適應(yīng)現(xiàn)在和未來需要的新東西。適應(yīng)未來的需求是一件十分重要的事。許多其他的技術(shù),比如DAO和ODBC,在一些應(yīng)用程序的開發(fā)過程中是可以接受的,然而隨著Internet的興起也出現(xiàn)了其自身的一些問題。 在許多情況下,傳統(tǒng)的數(shù)據(jù)存取方法看上去能解決一些關(guān)于兩層客戶/服務(wù)器系統(tǒng)的問題,但要求與數(shù)據(jù)之間要保持一種永久性的連接,并要提供強大的功能,比如快速響應(yīng)的查詢、數(shù)據(jù)容易修改等。在Internet領(lǐng)域,現(xiàn)在必須考慮到Web無狀態(tài)性本質(zhì),和潛在的眾多可以訪問Web站點的用戶。要與數(shù)據(jù)建立永久的連接是不現(xiàn)實的,因此必須在設(shè)計應(yīng)用程序時考慮這些因素。 那么,OLD DB和ADO確切地講到底是什么?讓我們與一些已有的數(shù)據(jù)存取技術(shù)做比較后再來回答這個問題。如果讀者曾經(jīng)接觸過數(shù)據(jù)庫編程,或許比較熟悉ODBC和RDO。開放數(shù)據(jù)庫連接(ODBC)是允許訪問關(guān)系數(shù)據(jù)庫(比如Access和SQL Server)的應(yīng)用程序編程接口(API)。正因為是一個API,許多程序員,特別是Visual Basic領(lǐng)域的程序員,發(fā)現(xiàn)它使用起來很復(fù)雜。遠程數(shù)據(jù)對象(RDO)是位于ODBC上層的ActiveX對象,可以提供ODBC的所有功能,并且使用起來比較簡單。 可以將OLE DB等同于ODBC,ADO等同于RDO。 OLE DB是應(yīng)用程序與數(shù)據(jù)源交互的一種基本技術(shù)。 這相當復(fù)雜,確實也只有C和C+程序員能夠使用。正如ADO的名字所暗示的,它是易于訪問OLE DB功能的ActiveX對象。 你或許發(fā)現(xiàn)術(shù)語ActiveX與COM對象經(jīng)常混用。對于ASP程序員來說它們并沒有本質(zhì)上的區(qū)別,因為兩者都基于COM系統(tǒng)結(jié)構(gòu),只不過ActiveX是組件的一個跨平臺標準,而COM是Windows專有的。 雖然微軟已經(jīng)引入了一種新的存取數(shù)據(jù)的技術(shù),但并沒有立即取消舊的技術(shù),ODBC工作起來仍然很有效,并同OLE DB和ADO緊密地一起工作著。事實上,ODBC并不只是微軟的產(chǎn)品,也受到國際組件的控制。并且由于廣泛的使用,ODBC也不會突然消亡。隱藏在OLE DB背后的思想不是摒棄現(xiàn)有的技術(shù),而是不斷地改進它們。8.1.1 OLE DB和ADO的體系結(jié)構(gòu) 前面已經(jīng)給出了OLE DB與ADO在一些主要方面的簡要解釋。圖8-1顯示了這兩項技術(shù)與應(yīng)用程序和數(shù)據(jù)存儲相互關(guān)系: 從圖8-1中可以看出整體思路。圖的頂端是應(yīng)用程序(Web或常規(guī)的應(yīng)用程序,這是無關(guān)緊要的),下面是提供對數(shù)據(jù)的訪問的ADO和/或OLE DB。ADO和OLE DB兩者兼有是因為OLE DB是一項基本技術(shù)。然而,OLE DB并不適用于所有語言,所以ADO位于OLE DB的上層,為那些不能直接訪問OLE DB的語言(如Visual Basic和腳本語言)提供編程接口。ADO提供了比OLE DB更容易的編程接口,因此即使那些可以直接使用OLE DB的編程語言,如C+或Java,也可使用ADO以簡化對數(shù)據(jù)的訪問。 圖8-1顯示的是微軟的編程語言,而ADO是一個COM組件,因此可用于任何與COM兼容的編程語言,比如Delphi或支持Active Scripting接口的腳本語言。所以,雖然ADO與平臺有關(guān),但與開發(fā)的語言是無關(guān)的。當然,對于ASP主要使用VBScript和JScript,在組件中使用ADO時,有一些Visual Basic代碼。 現(xiàn)在知道了OLE DB和ADO允許訪問數(shù)據(jù),可是為什么需要它們?老方法出問題了嗎?這里有兩個主要原因: 首先,OLE DB和ADO是用來訪問數(shù)據(jù)存儲的。注意這里指“數(shù)據(jù)存儲”而不是“數(shù)據(jù)庫”。盡管數(shù)據(jù)庫仍舊是數(shù)據(jù)存儲最為廣泛的形式,但并不一定含有全部的數(shù)據(jù)。一些消息系統(tǒng),如Microsoft Exchange Server,也普遍地用于存儲數(shù)據(jù)。目錄服務(wù)(Directory Service)正開始在初露端倪,它們包含著有關(guān)用戶、機器等的數(shù)據(jù);Web服務(wù)器中存有大量的信息??梢岳^續(xù)羅列下去,很明顯需要一種能訪問所有這些不同類型數(shù)據(jù)的方法。 其次,源于Internet應(yīng)用程序的興起與Web的狀態(tài)本質(zhì)。過去的訪問數(shù)據(jù)的方法主要考慮與數(shù)據(jù)存儲保持永久連接的情況下處理數(shù)據(jù)。而OLE DB和ADO正是為解決這個問題而設(shè)計的,提供斷開連接的記錄集,我們將會在后面看到有關(guān)這方面的內(nèi)容。8.1.2 消費者與提供者 ADO系統(tǒng)結(jié)構(gòu)圖展示了ADO是如何在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論