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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論