| VB實(shí)現SQL Server 2000存儲過(guò)程調用 | |||
| 文章出處:計算機與信息技術(shù) 發(fā)布時(shí)間:2005-10-25 | |||
|
關(guān)鍵字:數據庫;SQL Server2000;存儲過(guò)程;應用程序;VB 存儲過(guò)程 存儲過(guò)程是存儲在服務(wù)器上的一組預編譯的Transact-SQL語(yǔ)句,是一種封裝重復任務(wù)操作的方法,支持用戶(hù)提供的變量,具有強大的編程功能。它類(lèi)似于DOS系統中的BAT文件。在BAT文件中,可以包含一組經(jīng)常執行的命令,這組命令通過(guò)BAT文件的執行而被執行。同樣的道理,可以把要完成某項任務(wù)的許多Transact-SQL語(yǔ)句寫(xiě)在一起,組織成存儲過(guò)程的形式,通過(guò)執行該存儲過(guò)程就可以完成這項任務(wù)。存儲過(guò)程與BAT文件又有差別,即存儲過(guò)程已經(jīng)進(jìn)行了預編譯。 1、創(chuàng )建存儲過(guò)程的方法 在Transact-SQL語(yǔ)言中,創(chuàng )建存儲過(guò)程可以使用CREATE PROCEDURE語(yǔ)句,其語(yǔ)法形式如下: CREATE PROC[EDURE] procedure_name[;number]在上面的CREATE PROCEDURE語(yǔ)句中,方括號"[ ]"中的內容是可選的,花括號"{}"中的內容是必須出現的,不能省略,[,…n]表示前面的參數樣式,可以重復出現。豎線(xiàn)"|"表示兩邊的選項可以任選一個(gè)。 下面分析該語(yǔ)句中各種選項的含義。 CREATE PROCEDURE是關(guān)鍵字,也可以寫(xiě)成CREATE PROC。 procedure_name是該存儲過(guò)程的名稱(chēng),名稱(chēng)可以是任何符合命名規則的標示符。名稱(chēng)后的[;number]參數表示可以定義一系列的存儲過(guò)程名稱(chēng),這些存儲過(guò)程的數量由number指定。 參數名稱(chēng)可以使用@parameter data_type來(lái)指定。在Transact-SQL語(yǔ)言中,用戶(hù)定義的參數名稱(chēng)前面加"@"符號,這些數據類(lèi)型是Transact-SQL語(yǔ)言允許的各種數據類(lèi)型,包括系統提供的數據類(lèi)型和用戶(hù)定義的數據類(lèi)型。 當參數類(lèi)型為cursor時(shí),必須使用關(guān)鍵字VARYING和OUTPUT。VARYING表示結果集可以是一個(gè)輸出參數,其內容是動(dòng)態(tài)的。該關(guān)鍵字只能在使用游標作為數據類(lèi)型時(shí)使用。關(guān)鍵字OUTPUT表示這是一個(gè)輸出參數,可以把存儲過(guò)程執行的結果信息返回應用程序。 default用于指定參數的默認值。 RECOMPILE選項表示重新編譯該存儲過(guò)程。該選項只是在需要的時(shí)候才使用,例如經(jīng)常需要改變數據庫模式時(shí)。 ENCRYPTION選項用來(lái)加密創(chuàng )建存儲過(guò)程的文本,防止他人查看。 選項FOR REPLICATION主要用于復制過(guò)程中。注意,該選項不能和選項RECOMPILE同時(shí)使用。 AS是一個(gè)關(guān)鍵字,表示其后的內容是存儲過(guò)程的語(yǔ)句。參數sql-statement[…n]表示在一個(gè)存儲過(guò)程中可以包含多個(gè)Transact-SQL語(yǔ)句。 2、存儲過(guò)程的優(yōu)點(diǎn) 在頻繁訪(fǎng)問(wèn)數據庫的系統中,開(kāi)發(fā)者都樂(lè )于使用存儲過(guò)程,這與存儲過(guò)程的下列優(yōu)點(diǎn)是分不開(kāi)的。 ?、?存儲過(guò)程可以與其他應用程序共享應用程序的邏輯,從而確保一致的數據訪(fǎng)問(wèn)和操縱。 ?、?存儲過(guò)程提供了一種安全機制。如果用戶(hù)被授予執行存儲過(guò)程權限,那么即使該用戶(hù)沒(méi)有訪(fǎng)問(wèn)在執行該存儲過(guò)程中所參考的表或視圖的權限,該用戶(hù)也可以完全執行該存儲過(guò)程而不受到影響。因此,可以創(chuàng )建存儲過(guò)程來(lái)完成所有的增加、刪除等操作,并且可以通過(guò)編程控制上述操作中對信息的訪(fǎng)問(wèn)權限。 ?、?存儲過(guò)程執行速度快,便于提高系統的性能。由于存儲過(guò)程在第一次執行之后,其執行規劃就駐存在過(guò)程高速緩沖存儲區中,在以后的操作中,只需從過(guò)程高速緩沖存儲區中調用編譯好的二進(jìn)制形式存儲過(guò)程來(lái)執行。 ?、?使用存儲過(guò)程可以減少網(wǎng)絡(luò )傳輸時(shí)間。如果有一千條Transact-SQL語(yǔ)句的命令,一條一條地通過(guò)網(wǎng)絡(luò )在客戶(hù)機和服務(wù)器之間傳送,那么這種傳輸所耗費的時(shí)間將很長(cháng)。但是,如果把這一千條Transact-SQL語(yǔ)句的命令寫(xiě)成一條較為復雜的存儲過(guò)程命令,這時(shí)在客戶(hù)機和服務(wù)器之間網(wǎng)絡(luò )傳輸所需的時(shí)間就會(huì )大大減少。 SQL Server 2000數據庫存儲過(guò)程的調用 VB作為當今應用極為普遍的數據庫客戶(hù)端開(kāi)發(fā)工具之一,對客戶(hù)端應用程序調用服務(wù)器端存儲過(guò)程提供了強大的支持。特別是隨著(zhù)VB6.0的推出,VB客戶(hù)端應用程序可以方便地利用ADO的對象和集合來(lái)實(shí)現對數據庫存儲過(guò)程的調用。 在筆者編寫(xiě)的科技檔案管理系統中,就是采用VB作為開(kāi)發(fā)平臺,采用SQL Server2000數據庫管理數據,在這個(gè)科技檔案管理系統中有海量的數據,并且對數據庫有頻繁的訪(fǎng)問(wèn),利用存儲過(guò)程訪(fǎng)問(wèn)數據庫節省了執行時(shí)間,大大提高了系統的性能。 1、ADO簡(jiǎn)介 ADO控件(也稱(chēng)為ADO Data控件)與VB固有的Data控件相似。使用ADO Data控件,可以利用Microsoft ActiveX Data Objects(ADO)快速建立數據庫綁定控件和數據提供者之間的連接。 ADO Data控件可以實(shí)現以下功能: ·連接一個(gè)本地數據庫或遠程數據庫。 ·打開(kāi)一個(gè)指定的數據庫表,或定義一個(gè)基于結構化查詢(xún)語(yǔ)言(SQL)的查詢(xún)、存儲過(guò)程或該數據庫中的表的視圖的記錄集合。 ·將數據字段的數值傳遞給數據綁定控件,可以在這些控件中顯示或更改這些數值。 ·添加新的記錄,或根據更改顯示在綁定的控件中的數據來(lái)更新一個(gè)數據庫。 2、數據庫的連接 數據庫的連接可通過(guò)ADO控件實(shí)現,為此,必須在工程部件中選擇Microsoft ADO Data Control 6.0 (OLEDB),然后在窗體中添加ADO控件。利用ADO連接數據庫有兩種方法,具體如下。 1) 通過(guò)ADODC屬性頁(yè)實(shí)現連接 在A(yíng)DODC屬性頁(yè)中選擇生成按鈕,進(jìn)入數據鏈接屬性對話(huà)框;然后選擇該對話(huà)框中的連接屬性頁(yè),選擇或輸入服務(wù)器名稱(chēng)和數據庫等重要信息;最后測試連接,連接成功后,按確定按鈕,返回到屬性頁(yè)對話(huà)框,可獲得連接字符串,如下例: Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Science_File;Data Source=Data_Server其中sa是用戶(hù)名;Science_File是數據庫名;Data_Server是數據庫名。 通過(guò)下列語(yǔ)句,即可連接到指定的數據庫: dim odbcstr as String, adocon As New ADODB.Connection2) 直接使用連接語(yǔ)句實(shí)現 連接數據庫的語(yǔ)句如下: Dim ado as ADODC其中User-Pwd是用戶(hù)密碼;User_Name是用戶(hù)名;Data_Name是數據庫名;server_name是服務(wù)器名。 連接數據庫成功后就可以調用存儲過(guò)程執行操作。 3、存儲過(guò)程的調用 假設有一個(gè)名為doc_ProcName存儲過(guò)程,該存儲過(guò)程有一個(gè)輸入參數,一個(gè)輸出參數。 1) 直接傳遞參數調用存儲過(guò)程 直接傳遞參數方法主要通過(guò)以下幾個(gè)步驟來(lái)實(shí)現: ?。?) 通過(guò)ADODB的Connection對象打開(kāi)與數據源的連接; ?。?) 通過(guò)ActiveConnection指定Command對象當前所屬的Connection對象; ?。?) 通過(guò)CommandText屬性設置Command對象的源,即要調用的存儲過(guò)程; ?。?) 通過(guò)CommandType屬性確定Command對象的源類(lèi)型,如果源類(lèi)型為存儲過(guò)程CommandType即為adCmdStoredProc; ?。?) 通過(guò)Command對象的Parameters集合向所調用的存儲過(guò)程傳遞參數,其中對象Parameters(0)為執行存儲過(guò)程的返回值,返回值為0則執行存儲過(guò)程成功; ?。?) 通過(guò)Eexecute方法執行在 CommandText 屬性中指定的存儲過(guò)程。 以存儲過(guò)程doc_ProcName為例,關(guān)鍵代碼如下: Dim strS As String ‘定義一變量2) 追加參數法調用存儲過(guò)程 追加參數通過(guò)CreateParameter方法,用來(lái)指定屬性創(chuàng )建新的Parameter對象。具體語(yǔ)法如下: Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)·Name 可選,字符串,代表 Parameter 對象名稱(chēng)。 ·Type 可選,長(cháng)整型值,指定 Parameter 對象數據類(lèi)型。 ·Direction 可選,長(cháng)整型值,指定 Parameter 對象類(lèi)型。 ·Size 可選,長(cháng)整型值,指定參數值最大長(cháng)度(以字符或字節數為單位)。 ·Value 可選,變體型,指定 Parameter 對象值。 這種方法與上面一種方法的分別主要在于,追加參數的方法在向存儲過(guò)程傳遞參數時(shí),這種方法首先通過(guò)CreateParameter方法為存儲過(guò)程創(chuàng )建參數,然后通過(guò)Append方法將創(chuàng )建的參數追加到Parameters集合中去。 仍然以存儲過(guò)程doc_ProcName的調用為例,關(guān)鍵代碼如下: Dim mRst As ADODB.Recordset ‘Recordset 對象表示的是來(lái)自基本表或命令執行結果的記錄全集。以上代碼中未定義的變量以及未注釋的語(yǔ)句與前述相同。 結束語(yǔ) 在應用程序中調用服務(wù)器端存儲過(guò)程,不僅能顯著(zhù)提高整個(gè)應用的性能,而且能加強對數據庫數據的保護。VB為客戶(hù)端應用程序調用存儲過(guò)程提供了一組方便而有效的方法。 | |||
聯(lián)系客服