一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VB實現(xiàn)SQL Server 2000存儲過程調(diào)用

 bluecrystal 2006-08-04
VB實現(xiàn)SQL Server 2000存儲過程調(diào)用
文章出處:計算機與信息技術(shù)   發(fā)布時間:2005-10-25
 

摘要:本文以SQL Server2000存儲過程為例,探討了存儲過程的優(yōu)點,并以Visual Basic6.0程序設(shè)計語言給出了調(diào)用存儲過程的關(guān)鍵代碼。

  關(guān)鍵字:數(shù)據(jù)庫;SQL Server2000;存儲過程;應(yīng)用程序;VB
 
  存儲過程

  存儲過程是存儲在服務(wù)器上的一組預(yù)編譯的Transact-SQL語句,是一種封裝重復(fù)任務(wù)操作的方法,支持用戶提供的變量,具有強大的編程功能。它類似于DOS系統(tǒng)中的BAT文件。在BAT文件中,可以包含一組經(jīng)常執(zhí)行的命令,這組命令通過BAT文件的執(zhí)行而被執(zhí)行。同樣的道理,可以把要完成某項任務(wù)的許多Transact-SQL語句寫在一起,組織成存儲過程的形式,通過執(zhí)行該存儲過程就可以完成這項任務(wù)。存儲過程與BAT文件又有差別,即存儲過程已經(jīng)進行了預(yù)編譯。

  1、創(chuàng)建存儲過程的方法

  在Transact-SQL語言中,創(chuàng)建存儲過程可以使用CREATE PROCEDURE語句,其語法形式如下:

CREATE PROC[EDURE] procedure_name[;number]
[{@parameter data_type}[VARYING][=default][OUTPUT]
]],…n]
[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement[…n]

  在上面的CREATE PROCEDURE語句中,方括號"[ ]"中的內(nèi)容是可選的,花括號"{}"中的內(nèi)容是必須出現(xiàn)的,不能省略,[,…n]表示前面的參數(shù)樣式,可以重復(fù)出現(xiàn)。豎線"|"表示兩邊的選項可以任選一個。

  下面分析該語句中各種選項的含義。

  CREATE PROCEDURE是關(guān)鍵字,也可以寫成CREATE PROC。

  procedure_name是該存儲過程的名稱,名稱可以是任何符合命名規(guī)則的標(biāo)示符。名稱后的[;number]參數(shù)表示可以定義一系列的存儲過程名稱,這些存儲過程的數(shù)量由number指定。

  參數(shù)名稱可以使用@parameter data_type來指定。在Transact-SQL語言中,用戶定義的參數(shù)名稱前面加"@"符號,這些數(shù)據(jù)類型是Transact-SQL語言允許的各種數(shù)據(jù)類型,包括系統(tǒng)提供的數(shù)據(jù)類型和用戶定義的數(shù)據(jù)類型。

  當(dāng)參數(shù)類型為cursor時,必須使用關(guān)鍵字VARYING和OUTPUT。VARYING表示結(jié)果集可以是一個輸出參數(shù),其內(nèi)容是動態(tài)的。該關(guān)鍵字只能在使用游標(biāo)作為數(shù)據(jù)類型時使用。關(guān)鍵字OUTPUT表示這是一個輸出參數(shù),可以把存儲過程執(zhí)行的結(jié)果信息返回應(yīng)用程序。
default用于指定參數(shù)的默認(rèn)值。

  RECOMPILE選項表示重新編譯該存儲過程。該選項只是在需要的時候才使用,例如經(jīng)常需要改變數(shù)據(jù)庫模式時。

  ENCRYPTION選項用來加密創(chuàng)建存儲過程的文本,防止他人查看。

  選項FOR REPLICATION主要用于復(fù)制過程中。注意,該選項不能和選項RECOMPILE同時使用。

  AS是一個關(guān)鍵字,表示其后的內(nèi)容是存儲過程的語句。參數(shù)sql-statement[…n]表示在一個存儲過程中可以包含多個Transact-SQL語句。

  2、存儲過程的優(yōu)點

  在頻繁訪問數(shù)據(jù)庫的系統(tǒng)中,開發(fā)者都樂于使用存儲過程,這與存儲過程的下列優(yōu)點是分不開的。

 ?、?存儲過程可以與其他應(yīng)用程序共享應(yīng)用程序的邏輯,從而確保一致的數(shù)據(jù)訪問和操縱。

 ?、?存儲過程提供了一種安全機制。如果用戶被授予執(zhí)行存儲過程權(quán)限,那么即使該用戶沒有訪問在執(zhí)行該存儲過程中所參考的表或視圖的權(quán)限,該用戶也可以完全執(zhí)行該存儲過程而不受到影響。因此,可以創(chuàng)建存儲過程來完成所有的增加、刪除等操作,并且可以通過編程控制上述操作中對信息的訪問權(quán)限。

 ?、?存儲過程執(zhí)行速度快,便于提高系統(tǒng)的性能。由于存儲過程在第一次執(zhí)行之后,其執(zhí)行規(guī)劃就駐存在過程高速緩沖存儲區(qū)中,在以后的操作中,只需從過程高速緩沖存儲區(qū)中調(diào)用編譯好的二進制形式存儲過程來執(zhí)行。

 ?、?使用存儲過程可以減少網(wǎng)絡(luò)傳輸時間。如果有一千條Transact-SQL語句的命令,一條一條地通過網(wǎng)絡(luò)在客戶機和服務(wù)器之間傳送,那么這種傳輸所耗費的時間將很長。但是,如果把這一千條Transact-SQL語句的命令寫成一條較為復(fù)雜的存儲過程命令,這時在客戶機和服務(wù)器之間網(wǎng)絡(luò)傳輸所需的時間就會大大減少。

  SQL Server 2000數(shù)據(jù)庫存儲過程的調(diào)用

  VB作為當(dāng)今應(yīng)用極為普遍的數(shù)據(jù)庫客戶端開發(fā)工具之一,對客戶端應(yīng)用程序調(diào)用服務(wù)器端存儲過程提供了強大的支持。特別是隨著VB6.0的推出,VB客戶端應(yīng)用程序可以方便地利用ADO的對象和集合來實現(xiàn)對數(shù)據(jù)庫存儲過程的調(diào)用。

  在筆者編寫的科技檔案管理系統(tǒng)中,就是采用VB作為開發(fā)平臺,采用SQL Server2000數(shù)據(jù)庫管理數(shù)據(jù),在這個科技檔案管理系統(tǒng)中有海量的數(shù)據(jù),并且對數(shù)據(jù)庫有頻繁的訪問,利用存儲過程訪問數(shù)據(jù)庫節(jié)省了執(zhí)行時間,大大提高了系統(tǒng)的性能。

  1、ADO簡介

  ADO控件(也稱為ADO Data控件)與VB固有的Data控件相似。使用ADO Data控件,可以利用Microsoft ActiveX Data Objects(ADO)快速建立數(shù)據(jù)庫綁定控件和數(shù)據(jù)提供者之間的連接。

  ADO Data控件可以實現(xiàn)以下功能:

  ·連接一個本地數(shù)據(jù)庫或遠程數(shù)據(jù)庫。

  ·打開一個指定的數(shù)據(jù)庫表,或定義一個基于結(jié)構(gòu)化查詢語言(SQL)的查詢、存儲過程或該數(shù)據(jù)庫中的表的視圖的記錄集合。

  ·將數(shù)據(jù)字段的數(shù)值傳遞給數(shù)據(jù)綁定控件,可以在這些控件中顯示或更改這些數(shù)值。

  ·添加新的記錄,或根據(jù)更改顯示在綁定的控件中的數(shù)據(jù)來更新一個數(shù)據(jù)庫。

  2、數(shù)據(jù)庫的連接

  數(shù)據(jù)庫的連接可通過ADO控件實現(xiàn),為此,必須在工程部件中選擇Microsoft ADO Data Control 6.0 (OLEDB),然后在窗體中添加ADO控件。利用ADO連接數(shù)據(jù)庫有兩種方法,具體如下。

  1) 通過ADODC屬性頁實現(xiàn)連接

  在ADODC屬性頁中選擇生成按鈕,進入數(shù)據(jù)鏈接屬性對話框;然后選擇該對話框中的連接屬性頁,選擇或輸入服務(wù)器名稱和數(shù)據(jù)庫等重要信息;最后測試連接,連接成功后,按確定按鈕,返回到屬性頁對話框,可獲得連接字符串,如下例:

Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Science_File;Data Source=Data_Server
  其中sa是用戶名;Science_File是數(shù)據(jù)庫名;Data_Server是數(shù)據(jù)庫名。

  通過下列語句,即可連接到指定的數(shù)據(jù)庫:

dim odbcstr as String, adocon As New ADODB.Connection
odbcstr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Science_File;Data Source=Data_Server"
adocon.Open odbcstr ‘連接到數(shù)據(jù)庫

  2) 直接使用連接語句實現(xiàn)

  連接數(shù)據(jù)庫的語句如下:

Dim ado as ADODC
ado.ConnectionString = "Provider=SQLOLEDB.1;Password=" & User_Pwd & ";Persist Security Info=True;User ID=" & User_Name & ";Initial Catalog=" & Data_Name & ";Data Source=" & server_name

  其中User-Pwd是用戶密碼;User_Name是用戶名;Data_Name是數(shù)據(jù)庫名;server_name是服務(wù)器名。

  連接數(shù)據(jù)庫成功后就可以調(diào)用存儲過程執(zhí)行操作。

  3、存儲過程的調(diào)用

  假設(shè)有一個名為doc_ProcName存儲過程,該存儲過程有一個輸入?yún)?shù),一個輸出參數(shù)。

  1) 直接傳遞參數(shù)調(diào)用存儲過程

  直接傳遞參數(shù)方法主要通過以下幾個步驟來實現(xiàn):

  (1) 通過ADODB的Connection對象打開與數(shù)據(jù)源的連接;

 ?。?) 通過ActiveConnection指定Command對象當(dāng)前所屬的Connection對象;

 ?。?) 通過CommandText屬性設(shè)置Command對象的源,即要調(diào)用的存儲過程;

  (4) 通過CommandType屬性確定Command對象的源類型,如果源類型為存儲過程CommandType即為adCmdStoredProc;

  (5) 通過Command對象的Parameters集合向所調(diào)用的存儲過程傳遞參數(shù),其中對象Parameters(0)為執(zhí)行存儲過程的返回值,返回值為0則執(zhí)行存儲過程成功;

 ?。?) 通過Eexecute方法執(zhí)行在 CommandText 屬性中指定的存儲過程。

  以存儲過程doc_ProcName為例,關(guān)鍵代碼如下:

Dim strS As String ‘定義一變量
Dim adoconn As New ADODB.Connection ‘Connection 對象代表了打開與數(shù)據(jù)源的連接。
Dim adocomm As New ADODB.Command ‘Command 對象定義了將對數(shù)據(jù)源執(zhí)行的指定命令。
Dim ReturnValue As Integer ‘調(diào)用存儲過程的返回值
adoconn.ConnectionString = Adodc1.ConnectionString ‘Adodc1為窗體中的ADO控件,并已成功連接數(shù)據(jù)庫
adoconn.Open
Set adocomm.ActiveConnection = adoconn ‘指示指定的 Command對象當(dāng)前所屬的 Connection對象。
adocomm.CommandText = "doc_ProcName" ‘設(shè)置Command對象源。
adocomm.CommandType = adCmdStoredProc ‘通知提供者CommandText屬性有什么,它可能包括Command對象的源類型。設(shè)置這個屬性優(yōu)化了該命令的執(zhí)行。
adocomm.Parameters(1) = "1"
adocomm.Parameters(2) = "OutputParameters" ‘OutputParameters可以為任意的字符串或數(shù)字
adocomm.Execute
ReturnValue = adocomm.Parameters(0) ‘存儲過程的返回值,返回0則成功執(zhí)行。
strS = adocomm.Parameters(2) ‘把存儲過程的輸出參數(shù)的值賦給變量strS

  2) 追加參數(shù)法調(diào)用存儲過程

  追加參數(shù)通過CreateParameter方法,用來指定屬性創(chuàng)建新的Parameter對象。具體語法如下:

Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
  ·Name 可選,字符串,代表 Parameter 對象名稱。
  ·Type 可選,長整型值,指定 Parameter 對象數(shù)據(jù)類型。
  ·Direction 可選,長整型值,指定 Parameter 對象類型。
  ·Size 可選,長整型值,指定參數(shù)值最大長度(以字符或字節(jié)數(shù)為單位)。
  ·Value 可選,變體型,指定 Parameter 對象值。

  這種方法與上面一種方法的分別主要在于,追加參數(shù)的方法在向存儲過程傳遞參數(shù)時,這種方法首先通過CreateParameter方法為存儲過程創(chuàng)建參數(shù),然后通過Append方法將創(chuàng)建的參數(shù)追加到Parameters集合中去。

  仍然以存儲過程doc_ProcName的調(diào)用為例,關(guān)鍵代碼如下:

Dim mRst As ADODB.Recordset ‘Recordset 對象表示的是來自基本表或命令執(zhí)行結(jié)果的記錄全集。
Dim prm As ADODB.Parameter ‘Parameter 對象代表參數(shù)或與基于參數(shù)化查詢或存儲過程的Command 對象相關(guān)聯(lián)的參數(shù)。
adoconn.ConnectionString = Adodc1.ConnectionString
adoconn.Open
Set adocomm.ActiveConnection = adoconn
adocomm.CommandText = "doc_ProcName"
adocomm.CommandType = adCmdStoredProc
Set prm = adocomm.CreateParameter("parameter1", adTinyInt, adParamInput, , "1")
adocomm.Parameters.Append prm
Set prm = adocomm.CreateParameter("parameter2", adInteger, adParamOutput)
adocomm.Parameters.Append prm
Set mRst = adocomm.Execute
ReturnValue = adocomm.Parameters(0)

  以上代碼中未定義的變量以及未注釋的語句與前述相同。

  結(jié)束語

  在應(yīng)用程序中調(diào)用服務(wù)器端存儲過程,不僅能顯著提高整個應(yīng)用的性能,而且能加強對數(shù)據(jù)庫數(shù)據(jù)的保護。VB為客戶端應(yīng)用程序調(diào)用存儲過程提供了一組方便而有效的方法。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产精品欧美激情在线观看| 欧美一级特黄特色大色大片| 亚洲国产91精品视频| 日韩在线精品视频观看| 99久久精品午夜一区二区| 国产精品香蕉一级免费| 色婷婷久久五月中文字幕| 国产精品欧美在线观看| 东京热加勒比一区二区| 日本加勒比在线播放一区| 91日韩欧美国产视频| 在线日本不卡一区二区| 91欧美亚洲精品在线观看| a久久天堂国产毛片精品| 亚洲国产精品久久琪琪| 国产精品香蕉一级免费| 99久久婷婷国产亚洲综合精品| 91人妻人人澡人人人人精品| 丁香六月啪啪激情综合区| 中文字幕五月婷婷免费| 国产内射一级一片内射高清视频| 人妻熟女欲求不满一区二区| 日本午夜免费观看视频| 国产欧美日韩视频91| 精品一区二区三区免费看| 久久99热成人网不卡| 国内九一激情白浆发布| 蜜桃av人妻精品一区二区三区 | 99日韩在线视频精品免费| 成年男女午夜久久久精品| 丁香六月啪啪激情综合区| 日韩日韩欧美国产精品| 美国女大兵激情豪放视频播放| 伊人国产精选免费观看在线视频| 激情亚洲内射一区二区三区 | 香港国产三级久久精品三级| 女人精品内射国产99| 欧美日韩亚洲精品在线观看| 高清免费在线不卡视频| 色综合久久六月婷婷中文字幕| 国产精品日韩欧美一区二区|