在Asp中使用存儲(chǔ)過程數(shù)值類型值_第1頁
在Asp中使用存儲(chǔ)過程數(shù)值類型值_第2頁
在Asp中使用存儲(chǔ)過程數(shù)值類型值_第3頁
在Asp中使用存儲(chǔ)過程數(shù)值類型值_第4頁
在Asp中使用存儲(chǔ)過程數(shù)值類型值_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、在 Asp 中使用存儲(chǔ)過程數(shù)值類型值為了提高 Asp 程序的效率, 有時(shí)需要在 Asp 中使用使用 Sql Server的存儲(chǔ)技術(shù), 下面簡單作一個(gè)介紹。 存儲(chǔ)過程的建立這里只簡單介紹如何在 Sql Server的企業(yè)管理器中如何建立存儲(chǔ)過程:(1 打開企業(yè)管理器 Enterprise manager(2 選擇服務(wù)器組 (SQL Server Group、服務(wù)器、數(shù)據(jù)庫 (Database以及相就的數(shù)據(jù)庫,鼠標(biāo)右擊對(duì)應(yīng)數(shù) 據(jù)庫下的 Stored Procdures項(xiàng),在彈出的菜單中選擇 New Stored Procedure,在 Stored Procedures Pr operties 中

2、輸入建立存儲(chǔ)過程的語句。下面是一個(gè)例子:CREATE PROCEDURE proctest mycola Char(10,mycolb Char(10,mycolc text ASInsert into chatdata (mycola,mycolb,mycolc values(mycola,mycolb,mycolc在 Sql Server的文檔中它的語法為:CREATE PROCEDURE procedure_name ;number parameter data_type VARYING = default OUTPUT ,.n WITH RECOMPILE | ENCRYPTION|

3、RECOMPILE, ENCRYPTION FOR REPLICATION ASsql_statement .n如果你對(duì) Sql 語法不熟悉,可以使用 Check Syntax來檢查語法。在上例中,表示建立存儲(chǔ)過程名為 m ycola ,帶3個(gè)參數(shù)的存儲(chǔ)過過程,其中第一個(gè)參數(shù) mycola 數(shù)據(jù)類型為 char ,寬度 10;第2個(gè)參數(shù)數(shù)據(jù)類 型為 char ,寬度為 10,第3個(gè)參數(shù)數(shù)據(jù)類型為 text ,在這里使用的是 Sql Server的數(shù)據(jù)類型。存儲(chǔ)過程建立后,下面就是如何在 Asp 程序中調(diào)用該存儲(chǔ)過程:在 Asp 中調(diào)用存儲(chǔ)過程 為了提高 Asp 程序的效率,有時(shí)需要在 Asp

4、中使用使用 Sql Server的存儲(chǔ)技術(shù),下面簡單作一個(gè) , 在上面的增加參數(shù)的 語句 p.Append cm.CreateParameter("mycolc",201,1,250中,格式為:p.Append cm.CreateParameter("參數(shù)名稱 ", 類型 , 方向 , 大小 參許參數(shù)值的類型的意義如下:名稱值 整數(shù)值 功能adDBTimeStamp 135 日期時(shí)間數(shù)據(jù)類型adDecimal 14 十進(jìn)制整數(shù)值adDouble 5 雙精度小數(shù)值adError 10 系統(tǒng)錯(cuò)誤信息AdGUID 72 全域性唯一識(shí)別字 (Globally u

5、nique identifier adDispath 9 COM/OLE自動(dòng)對(duì)象 (Automation Object adInteger 3 4字節(jié)有符號(hào)整數(shù)adIUnknown 13 COM/OLE對(duì)象adLongVarBinary 205 大型2字節(jié)值adLongVarChar 201 大型字符串值adLongVarWChar 203 大型未編碼字符串a(chǎn)dNumeric 131 十進(jìn)制整數(shù)值adSingle 4 單精度浮點(diǎn)小數(shù)adSmallInt 2 2字節(jié)有符號(hào)整數(shù)adTinyInt 16 1字節(jié)有符號(hào)整數(shù)adUnsignedBigInt 21 8字節(jié)無符號(hào)整數(shù)adUnsignedIn

6、t 19 4字節(jié)無符號(hào)整數(shù)adUnsignedSmallInt 18 2字節(jié)無符號(hào)整數(shù)adUnsignedTinyInt 17 1字節(jié)無符號(hào)整數(shù)adUserDefined 132 用戶自定義數(shù)據(jù)類型adVariant 12 OLE對(duì)象adVarBinary 204 雙字節(jié)字符變量值adVarChar 200 字符變量值advarchar 202 未編碼字符串變量值adWchar 130 未編碼字符串方向值的意義如下:名稱值 整數(shù)值 功能adParamInput 1 允許數(shù)據(jù)輸入至該參數(shù)當(dāng)中adParamOutput 2 允許數(shù)據(jù)輸出至該參數(shù)當(dāng)中adParamInputOutput 3 允許數(shù)據(jù)

7、輸入、輸出至該參數(shù)當(dāng)中adparamReturnValue 4 允許從一子程序中返回?cái)?shù)據(jù)至該參數(shù)當(dāng)中更多詳細(xì)資源請(qǐng)參考 Sql Server的文檔和 IIS 的文檔資源。本欄文章均來自于互聯(lián)網(wǎng),版權(quán)歸原作者和各發(fā)布網(wǎng)站所有,本站收集這些文章僅供學(xué)習(xí)參考之用。任何 人都不能將這些文章用于商業(yè)或者其他目的。 ( C ASP 與存儲(chǔ)過程 (Stored Procedures的文章不少,但是我懷疑作者們是否真正 實(shí)踐過。 我在初學(xué)時(shí)查閱過大量相關(guān)資料, 發(fā)現(xiàn)其中提供的很多方法實(shí)際操作起 來并不是那么回事。對(duì)于簡單的應(yīng)用,這些資料也許是有幫助的,但僅限于此, 因?yàn)樗鼈兏揪褪乔宦? 互相抄襲, 稍微

8、復(fù)雜點(diǎn)的應(yīng)用, 就全都語焉不詳了。 現(xiàn)在,我基本上通過調(diào)用存儲(chǔ)過程訪問 SQL Server,以下的文字雖不敢保 證絕對(duì)正確,但都是實(shí)踐的總結(jié),希望對(duì)大家能有幫助。存儲(chǔ)過程就是作為可執(zhí)行對(duì)象存放在數(shù)據(jù)庫中的一個(gè)或多個(gè) SQL 命令。 定義總是很抽象。 存儲(chǔ)過程其實(shí)就是能完成一定操作的一組 SQL 語句, 只不 過這組語句是放在數(shù)據(jù)庫中的 (這里我們只談 SQL Server。如果我們通過創(chuàng)建 存儲(chǔ)過程以及在 ASP 中調(diào)用存儲(chǔ)過程, 就可以避免將 SQL 語句同 ASP 代碼混雜在 一起。這樣做的好處至少有三個(gè):第一、 大大提高效率。 存儲(chǔ)過程本身的執(zhí)行速度非常快, 而且, 調(diào)用存儲(chǔ)過 程可以

9、大大減少同數(shù)據(jù)庫的交互次數(shù)。第二、 提高安全性。 假如將 SQL 語句混合在 ASP 代碼中, 一旦代碼失密, 同 時(shí)也就意味著庫結(jié)構(gòu)失密。第三、有利于 SQL 語句的重用。在 ASP 中, 一般通過 command 對(duì)象調(diào)用存儲(chǔ)過程, 根據(jù)不同情況, 本文也介 紹其它調(diào)用方法。為了方便說明,根據(jù)存儲(chǔ)過程的輸入輸出,作以下簡單分類: 1. 只返回單一記錄集的存儲(chǔ)過程假設(shè)有以下存儲(chǔ)過程 (本文的目的不在于講述 T-SQL 語法,所以存儲(chǔ)過程只 給出代碼,不作說明 :/*SP1*/CREATE PROCEDURE dbo.getUserListasset nocount onbeginselect

10、 * from dbo.userinfoendgo以上存儲(chǔ)過程取得 userinfo 表中的所有記錄,返回一個(gè)記錄集。通過 command 對(duì)象調(diào)用該存儲(chǔ)過程的 ASP 代碼如下 :'*通過 Command 對(duì)象調(diào)用存儲(chǔ)過程 *DIM MyComm,MyRstSet MyComm = Server.CreateObject("ADODB.Command"MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接 字串MyComm.CommandText = "getUserList" '指

11、定存儲(chǔ)過程名MyComm.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 MyComm.Prepared = true '要求將 SQL 命令先行編 譯Set MyRst = MyComm.ExecuteSet MyComm = Nothing存儲(chǔ)過程取得的記錄集賦給 MyRst ,接下來,可以對(duì) MyRst 進(jìn)行操作。 在以上代碼中, CommandType 屬性表明請(qǐng)求的類型,取值及說明如下: -1 表明 CommandText 參數(shù)的類型無法確定1 表明 CommandText 是一般的命令類型2 表明 CommandText 參數(shù)是一個(gè)存在的表名稱4 表明 Co

12、mmandText 參數(shù)是一個(gè)存儲(chǔ)過程的名稱還可以通過 Connection 對(duì)象或 Recordset 對(duì)象調(diào)用存儲(chǔ)過程,方法分別如 下:'*通過 Connection 對(duì)象調(diào)用存儲(chǔ)過程 *DIM MyConn,MyRstSet MyConn = Server.CreateObject("ADODB.Connection"MyConn.open MyConStr 'MyConStr是數(shù)據(jù)庫 連接字串Set MyRst = MyConn.Execute("getUserList",0,4 '最后一個(gè)參斷含義 同 CommandTy

13、peSet MyConn = Nothing'*通過 Recordset 對(duì)象調(diào)用存儲(chǔ)過程 *DIM MyRstSet MyRst = Server.CreateObject("ADODB.Recordset"MyRst.open "getUserList",MyConStr,0,1,4'MyConStr是數(shù)據(jù)庫連接字串 , 最后一個(gè)參斷含義與 CommandType 相同 2. 沒有輸入輸出的存儲(chǔ)過程請(qǐng)看以下存儲(chǔ)過程:/*SP2*/CREATE PROCEDURE dbo.delUserAllasset nocount onbegind

14、elete from dbo.userinfoendgo該存儲(chǔ)過程刪去 userinfo 表中的所有記錄,沒有任何輸入及輸出,調(diào)用方 法與上面講過的基本相同,只是不用取得記錄集:'*通過 Command 對(duì)象調(diào)用存儲(chǔ)過程 *DIM MyCommSet MyComm = Server.CreateObject("ADODB.Command"MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接 字串MyComm.CommandText = "delUserAll" '指定存儲(chǔ)過程名MyC

15、omm.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 MyComm.Prepared = true '要求將 SQL 命令先行編 譯MyComm.Execute '此處不必再取得記錄集 Set MyComm = Nothing當(dāng)然也可通過 Connection 對(duì)象或 Recordset 對(duì)象調(diào)用此類存儲(chǔ)過程,不過 建立 Recordset 對(duì)象是為了取得記錄集, 在沒有返回記錄集的情況下, 還是利用 Command 對(duì)象吧。3. 有返回值的存儲(chǔ)過程在進(jìn)行類似 SP2的操作時(shí),應(yīng)充分利用 SQL Server強(qiáng)大的事務(wù)處理功能, 以維護(hù)數(shù)據(jù)的一致性。并且,我們

16、可能需要存儲(chǔ)過程返回執(zhí)行情況,為此,將 SP2修改如下:/*SP3*/CREATE PROCEDURE dbo.delUserAllasset nocount onbeginBEGIN TRANSACTIONdelete from dbo.userinfoIF error=0beginCOMMIT TRANSACTIONreturn 1endELSEbeginROLLBACK TRANSACTIONreturn 0endreturnendgo以上存儲(chǔ)過程, 在 delete 順利執(zhí)行時(shí), 返回 1, 否則返回 0, 并進(jìn)行回滾操 作。為了在 ASP 中取得返回值,需要利用 Parameters

17、 集合來聲明參數(shù):'*調(diào)用帶有返回值的存儲(chǔ)過程并取得返回值 *DIM MyComm,MyParaSet MyComm = Server.CreateObject("ADODB.Command"MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接 字串MyComm.CommandText = "delUserAll" '指定存儲(chǔ)過程名MyComm.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 MyComm.Prepared = true '要求將 SQL 命令

18、先行編 譯'聲明返回值Set Mypara = MyComm.CreateParameter("RETURN",2,4MyComm.Parameters.Append MyParaMyComm.Execute'取得返回值DIM retValueretValue = MyComm(0 '或 retValue = MyComm.Parameters(0Set MyComm = Nothing在 MyComm.CreateParameter("RETURN",2,4中,各參數(shù)的含義如下:第一個(gè)參數(shù) ("RETURE"

19、為參數(shù)名。 參數(shù)名可以任意設(shè)定, 但一般應(yīng)與存儲(chǔ)過 程中聲明的參數(shù)名相同。此處是返回值,我習(xí)慣上設(shè)為 "RETURE" ;第二個(gè)參數(shù) (2, 表明該參數(shù)的數(shù)據(jù)類型, 具體的類型代碼請(qǐng)參閱 ADO 參考, 以下給出常用的類型代碼:adBigInt: 20 ;adBinary : 128 ;adBoolean: 11 ;adChar: 129 ;adDBTimeStamp: 135 ;adEmpty: 0 ;adInteger: 3 ;adSmallInt: 2 ;adTinyInt: 16 ;adVarChar: 200 ;對(duì)于返回值,只能取整形,且 -1到 -99為保留值;

20、第三個(gè)參數(shù) (4,表明參數(shù)的性質(zhì),此處 4表明這是一個(gè)返回值。此參數(shù)取 值的說明如下:0 : 類型無法確定; 1: 輸入?yún)?shù); 2: 輸入?yún)?shù); 3:輸入或輸出參數(shù); 4: 返回值以上給出的 ASP 代碼,應(yīng)該說是完整的代碼,也即最復(fù)雜的代碼,其實(shí) Set Mypara = MyComm.CreateParameter("RETURN",2,4MyComm.Parameters.Append MyPara可以簡化為MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4甚至還可以繼續(xù)簡化,稍

21、后會(huì)做說明。對(duì)于帶參數(shù)的存儲(chǔ)過程,只能使用 Command 對(duì)象調(diào)用 (也有資料說可通過 Connection 對(duì)象或 Recordset 對(duì)象調(diào)用,但我沒有試成過 。4. 有輸入?yún)?shù)和輸出參數(shù)的存儲(chǔ)過程返回值其實(shí)是一種特殊的輸出參數(shù)。 在大多數(shù)情況下, 我們用到的是同時(shí)有 輸入及輸出參數(shù)的存儲(chǔ)過程,比如我們想取得用戶信息表中,某 ID 用戶的用戶 名,這時(shí)候,有一個(gè)輸入?yún)?shù) -用戶 ID ,和一個(gè)輸出參數(shù) -用戶名。實(shí)現(xiàn) 這一功能的存儲(chǔ)過程如下:/*SP4*/CREATE PROCEDURE dbo.getUserNameUserID int,UserName varchar(40 outp

22、utasset nocount onbeginif UserID is null returnselect UserName=usernamefrom dbo.userinfowhere userid=UserIDreturnendgo調(diào)用該存儲(chǔ)過程的 ASP 代碼如下:'*調(diào)用帶有輸入輸出參數(shù)的存儲(chǔ)過程 *DIM MyComm,UserID,UserNameUserID = 1Set MyComm = Server.CreateObject("ADODB.Command"MyComm.ActiveConnection = MyConStr 'MyConSt

23、r是數(shù)據(jù)庫連接 字串MyComm.CommandText = "getUserName" '指定存儲(chǔ)過程名MyComm.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 MyComm.Prepared = true '要求將 SQL 命令先行編 譯'聲明參數(shù)MyComm.Parameters.appendMyComm.CreateParameter("UserID",3,1,4,UserIDMyComm.Parameters.appendMyComm.CreateParameter("UserName&qu

24、ot;,200,2,40MyComm.Execute'取得出參UserName = MyComm(1Set MyComm = Nothing在以上代碼中, 可以看到, 與聲明返回值不同, 聲明輸入?yún)?shù)時(shí)需要 5個(gè)參 數(shù),聲明輸出參數(shù)時(shí)需要 4個(gè)參數(shù)。聲明輸入?yún)?shù)時(shí) 5個(gè)參數(shù)分別為:參數(shù)名、 參數(shù)數(shù)據(jù)類型、參數(shù)類型、數(shù)據(jù)長度、參數(shù)值。聲明輸出參數(shù)時(shí),沒有最后一個(gè) 參數(shù):參數(shù)值。需要特別注意的是:在聲明參數(shù)時(shí), 順序一定要與存儲(chǔ)過程中定義的順序相 同,而且各參數(shù)的數(shù)據(jù)類型、長度也要與存儲(chǔ)過程中定義的相同。如果存儲(chǔ)過程有多個(gè)參數(shù), ASP 代碼會(huì)顯得繁瑣,可以使用 with 命令簡化 代碼:

25、'*調(diào)用帶有輸入輸出參數(shù)的存儲(chǔ)過程 (簡化代碼 *DIM MyComm,UserID,UserNameUserID = 1Set MyComm = Server.CreateObject("ADODB.Command"with MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字 串.CommandText = "getUserName" '指定存儲(chǔ)過程名.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 .Prepared = true '要求將 SQL 命

26、令先行編譯 .Parameters.append .CreateParameter("UserID",3,1,4,UserID .Parameters.append .CreateParameter("UserName",200,2,40 .Executeend withUserName = MyComm(1Set MyComm = Nothing假如我們要取得 ID 為 1到 10, 10位用戶的用戶名,是不是要?jiǎng)?chuàng)建 10次 Command 對(duì)象呢?不是的。 如果需要多次調(diào)用同一存儲(chǔ)過程, 只需改變輸入?yún)?shù), 就會(huì)得到不同的輸出:'*多次調(diào)用同

27、一存儲(chǔ)過程 *DIM MyComm,UserID,UserNameUserName = ""Set MyComm = Server.CreateObject("ADODB.Command"for UserID = 1 to 10with MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字串.CommandText = "getUserName" '指定存儲(chǔ)過程名.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 .Prepared = true '

28、;要求將 SQL 命令先行編 譯if UserID = 1 then.Parameters.append .CreateParameter("UserID",3,1,4,User ID.Parameters.append .CreateParameter("UserName",200,2,40 .Executeelse'重新給入?yún)①x值 (此時(shí)參數(shù)值不發(fā)生變化的入?yún)⒁约俺鰠⒉槐刂?新聲明 .Parameters("UserID" = UserID.Executeend ifend withUserName = UserName

29、+ MyComm(1 + "," '也許你喜歡用數(shù)組存儲(chǔ) nextSet MyComm = Nothing通過以上代碼可以看出:重復(fù)調(diào)用同一存儲(chǔ)過程時(shí), 只需為值發(fā)生改變的輸 入?yún)?shù)重新賦值即可, 這一方法在有多個(gè)輸入輸出參數(shù), 且每次調(diào)用時(shí)只有一個(gè) 輸入?yún)?shù)的值發(fā)生變化時(shí),可以大大減少代碼量。5. 同時(shí)具有返回值、輸入?yún)?shù)、輸出參數(shù)的存儲(chǔ)過程前面說過, 在調(diào)用存儲(chǔ)過程時(shí), 聲明參數(shù)的順序要與存儲(chǔ)過程中定義的順序 相同。 還有一點(diǎn)要特別注意:如果存儲(chǔ)過程同時(shí)具有返回值以及輸入、 輸出參數(shù), 返回值要最先聲明。為了演示這種情況下的調(diào)用方法,我們改善一下上面的例子。還是

30、取得 ID 為 1的用戶的用戶名, 但是有可能該用戶不存在 (該用戶已刪除, 而 userid 是自 增長的字段 。存儲(chǔ)過程根據(jù)用戶存在與否,返回不同的值。此時(shí),存儲(chǔ)過程和 ASP 代碼如下:/*SP5*/CREATE PROCEDURE dbo.getUserName-為了加深對(duì) " 順序 " 的印象,將以下兩參數(shù)的定義順序顛倒一下UserName varchar(40 output,UserID intasset nocount onbeginif UserID is null returnselect UserName=usernamefrom dbo.userinf

31、owhere userid=UserIDif rowcount>0return 1elsereturn 0returnendgo'*調(diào)用同時(shí)具有返回值、輸入?yún)?shù)、輸出參數(shù)的存儲(chǔ)過程 *DIM MyComm,UserID,UserNameUserID = 1Set MyComm = Server.CreateObject("ADODB.Command"with MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字 串.CommandText = "getUserName" '指

32、定存儲(chǔ)過程名.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 .Prepared = true '要求將 SQL 命令先行編譯 '返回值要最先被聲明.Parameters.Append .CreateParameter("RETURN",2,4'以下兩參數(shù)的聲明順序也做相應(yīng)顛倒.Parameters.append .CreateParameter("UserName",200,2,40 .Parameters.append .CreateParameter("UserID",3,1,4,User

33、ID .Executeend withif MyComm(0 = 1 thenUserName = MyComm(1elseUserName = "該用戶不存在 "end ifSet MyComm = Nothing6. 同時(shí)返回參數(shù)和記錄集的存儲(chǔ)過程有時(shí)候, 我們需要存儲(chǔ)過程同時(shí)返回參數(shù)和記錄集, 比如在利用存儲(chǔ)過程分 頁時(shí), 要同時(shí)返回記錄集以及數(shù)據(jù)總量等參數(shù)。 以下給出一個(gè)進(jìn)行分頁處理的存 儲(chǔ)過程:/*SP6*/CREATE PROCEDURE dbo.getUserListiPageCount int OUTPUT, -總頁數(shù)iPage int, -當(dāng)前頁號(hào)iPag

34、eSize int -每頁記錄數(shù)asset nocount onbegin-創(chuàng)建臨時(shí)表create table #t (ID int IDENTITY, -自增字段userid int,username varchar(40-向臨時(shí)表中寫入數(shù)據(jù)insert into #tselect userid,username from dbo.UserInfoorder by userid-取得記錄總數(shù)declare iRecordCount intset iRecordCount = rowcount-確定總頁數(shù)IF iRecordCount%iPageSize=0SET iPageCount=CEI

35、LING(iRecordCount/iPageSize ELSESET iPageCount=CEILING(iRecordCount/iPageSize+1-若請(qǐng)求的頁號(hào)大于總頁數(shù),則顯示最后一頁IF iPage > iPageCountSELECT iPage = iPageCount-確定當(dāng)前頁的始末記錄DECLARE iStart int -start recordDECLARE iEnd int -end recordSELECT iStart = (iPage - 1 * iPageSizeSELECT iEnd = iStart + iPageSize + 1-取當(dāng)前頁記錄

36、select * from #t where ID>iStart and ID<iEnd-刪除臨時(shí)表DROP TABLE #t-返回記錄總數(shù)return iRecordCountendgo在上面的存儲(chǔ)過程中,輸入當(dāng)前頁號(hào)及每頁記錄數(shù),返回當(dāng)前頁的記錄集, 總頁數(shù)及記錄總數(shù)。 為了更具典型性, 將記錄總數(shù)以返回值的形式返回。 以下是 調(diào)用該存儲(chǔ)過程的 ASP 代碼 (具體的分頁操作略去 :'*調(diào)用分頁存儲(chǔ)過程 *DIM pagenow,pagesize,pagecount,recordcountDIM MyComm,MyRstpagenow = Request("p

37、n"'自定義函數(shù)用于驗(yàn)證自然數(shù)if CheckNar(pagenow = false then pagenow = 1pagesize = 20Set MyComm = Server.CreateObject("ADODB.Command"with MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字 串.CommandText = "getUserList" '指定存儲(chǔ)過程名.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 .Prepared = tru

38、e '要求將 SQL 命令先行編譯 '返回值 (記錄總量 .Parameters.Append .CreateParameter("RETURN",2,4'出參 (總頁數(shù) .Parameters.Append .CreateParameter("iPageCount",3,2'入?yún)?(當(dāng)前頁號(hào) .Parameters.append .CreateParameter("iPage",3,1,4,pagenow '入?yún)?(每頁記錄數(shù) .Parameters.append .CreateParamet

39、er("iPageSize",3,1,4,pagesiz eSet MyRst = .Executeend withif MyRst.state = 0 then '未取到數(shù)據(jù), MyRst 關(guān)閉recordcount = -1elseMyRst.close '注意:若要取得參數(shù)值,需先關(guān)閉記錄集對(duì)象recordcount = MyComm(0pagecount = MyComm(1if cint(pagenow>=cint(pagecount then pagenow=pagecountend ifSet MyComm = Nothing'以

40、下顯示記錄if recordcount = 0 thenResponse.Write "無記錄 "elseif recordcount > 0 thenMyRst.opendo until MyRst.EOF.loop'以下顯示分頁信息.else 'recordcount=-1Response.Write "參數(shù)錯(cuò)誤 "end if對(duì)于以上代碼, 只有一點(diǎn)需要說明:同時(shí)返回記錄集和參數(shù)時(shí), 若要取得參 數(shù),需先將記錄集關(guān)閉,使用記錄集時(shí)再將其打開。7. 返回多個(gè)記錄集的存儲(chǔ)過程本文最先介紹的是返回記錄集的存儲(chǔ)過程。 有時(shí)候, 需要一

41、個(gè)存儲(chǔ)過程返回 多個(gè)記錄集,在 ASP 中,如何同時(shí)取得這些記錄集呢?為了說明這一問題,在 userinfo 表中增加兩個(gè)字段:usertel 及 usermail ,并設(shè)定只有登錄用戶可以 查看這兩項(xiàng)內(nèi)容。/*SP7*/CREATE PROCEDURE dbo.getUserInfouserid int,checklogin bitasset nocount onbeginif userid is null or checklogin is null returnselect usernamefrom dbo.usrinfowhere userid=userid-若為登錄用戶,取 usert

42、el 及 usermailif checklogin=1select usertel,usermailfrom dbo.userinfowhere userid=useridreturnendgo以下是 ASP 代碼:'*調(diào)用返回多個(gè)記錄集的存儲(chǔ)過程 *DIM checklg,UserID,UserName,UserTel,UserMailDIM MyComm,MyRstUserID = 1'checklogin(為自定義函數(shù),判斷訪問者是否登錄checklg = checklogin(Set MyComm = Server.CreateObject("ADODB.C

43、ommand"with MyComm.ActiveConnection = MyConStr 'MyConStr是數(shù)據(jù)庫連接字 串.CommandText = "getUserInfo" '指定存儲(chǔ)過程名.CommandType = 4 '表明這是一個(gè)存儲(chǔ)過程 .Prepared = true '要求將 SQL 命令先行編譯 .Parameters.append .CreateParameter("userid",3,1,4,UserID .Parameters.append .CreateParameter("checklogin",11,1,1,check lgSet MyRst =

溫馨提示

  • 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)論