人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

WebComputing━ADO總結報告5

WebComputing━ADO總結報告5

更新時間:2021-01-16 文章作者:未知 信息來源:網絡 閱讀次數:

五、StoredProcedure
  在討論StoredProcedure之前,我還要對Command對象的Execute方法的作用進行一下闡述,一般來說使用Command的Execute方法有三個目的。1、用于進行一些簡單的處理,例如刪除一條記錄:
comm.CommandType=AdCmdText
comm.CommandText="Delect From employee Where Job_ID=1"
comm.execute
  這樣的工作不需要返回什么東西。2、用于進行一些復雜的處理,例如進行一個Transact的設計,這類一般都是和StoredProcedure一同工作的,而且有輸出參數和輸入的參數,這也是我們本章的討論主題。3、用于返回一個RecordSet對象,用于其它的處理,例如:
comm.CommandType=AdCmdText
comm.CommandText="Delect From employee Where Job_ID=1"
set rs=comm.execute
dim i
while not rs.EOF
for i=0 to rs.fileds.count-1
response.write rs.fileds.item(i).value&","
next
response.write "<br>"
rs.MoveNext
wend
  好了,還是讓我們從新回到StoredProcedure的討論上來。StoredProcedure是什么呢?它是一個預先存儲的數據庫執行動作集,在SQL的管理結構中,對于一個數據庫下有幾個部分,一個是數據表的集合、一個就是StoredProcedure的集合。將兩者結合可以完成很多強大的功能。StoredProcedure其實是對傳統的SQL語句的一種擴展,主要是在參數的輸入與輸出上。下面我大致的介紹一下StoredProcedure的語法結構和與Command對象的參數的傳遞問題。
StoredProcedure的標準寫法:(在SQL Server上用Query Analyzer執行)
Create Procedure Procedure_Name
Define Parameter
As
SQL Structure
上  面的語法結構中,Procedure_Name為存儲結構的的名字,也是你將在Command中引用的名字。然后是定義輸出和輸入的參數。最后是一個SQL結構化語句。下面是一個StoredProcedure的例子,它無需輸入的參數,也沒有輸出。
Create Procedure Del_User

As
Delect From Employee Where Job_ID=1
如果我們要刪除指定的 Job_ID該怎么辦呢?,這時我們需要給這個StoredProcedure輸入的參數。
Create Procedure Del_User1
@intID int
As
Delect From Employee Where Job_Id = @intID
好了,這里的@intJob就是一個輸入的參數,它可以從外部接受輸入的值,下面是給它輸入的asp程序:
set conn=Server.CreateObject("ADODB.Connection")
set comm=Server.CreateObject("ADODB.Command")
conn.ConnectionString="Driver={SQL Server};Server=ser;"& _
"uid=sa;pass=;database=employee "
conn.open
comm.ActiveConnection=conn
comm.CommandType=adCmdStoredProc
comm.CommandType="Del_User1"
"這里的名字就是前面在SQL Server中定義過的StoredProcedure的名字。
"下面就是參數的輸入
param=comm.CreateParameter("ID",adInt,adParamInput,4)
"這里的adParamInput定義是最重要的。
Param.Value=1 "這里的值可以輸入你想要的值,也可以用Request來獲得
Comm.Parameters.Append param
Comm.Execute
  這樣我們就可以向StoredProcedure傳遞參數了。有時在一個StoredProcedure中,還存在有輸出的參數,下面是一個例子它返回一個Job_ID確定的Fri_Name的值
Create Procedure Get_fName
@intID int
@fName varChar Output "說明為輸出的參數
As
Select @fName = Fri_Name Where Job_ID = @intID
它相應的asp程序也要改寫為下面的形式
set conn=Server.CreateObject("ADODB.Connection")
set comm=Server.CreateObject("ADODB.Command")
conn.ConnectionString="Driver={SQL Server};Server=ser;"&_
"uid=sa;psss=;database=employee"
conn.open
comm.ActiveConnection=conn
comm.CommandType=adCmdStoredProc
comm.CommandType="Get_fName"
"這里的名字就是前面定義過的StoredProcedure的名字。
"下面就是參數的輸入
param=comm.CreateParameter("ID",adInt,adParamInput,4)
"這里的adParamInput定義是最重要的。
Param.Value=2 "這里的值可以輸入你想要的值,也可以用Request來獲得
Comm.Parameters.Append param
param=comm.CreateParameter("fName",adVarchar,adParamOutput,255,"")
"這里的adParamOutput定義是最重要的。說明它是一個輸出的參數,默認的值 為一空的字符串
comm.Parameters.Append param
Comm.Execute
Response.Write "Job_Id為"&para;m(0)&"的員工的首姓為"&para;m(1)
  我給大家簡單介紹了一下StoredProcedure的基本概念,但StoredProcedure比較復雜,如果你想進一步的深入,必須對SQL Server的結構體系有全面的了解。另外,我們并沒有在上面的里子中體會到StoredProcedure的優勢,很多人會認為那還不如用普通的方法,其實在構建很多企業級的應用時才能夠體會到用StoredProcedure的強大和必要性,這里我舉一個簡單的例子。一個網絡銀行的數據庫(onLoan)中有兩個相關的表Loan表和LoanHistory表,loan表用于記錄貸款的信息,而每一筆貸款的記錄在Loan表中登記后都必須在LoanHistory表中登記,因為定期的結算都是使用LoanHistory表的。你也許會說那很好辦啊。用兩個Insert Into語句分別向兩個表中插入記錄不就行了嗎!但要注意的是在這個應用中,若記錄在任何的一個表中插入失敗都必須將整個的過程給取消(也就是一個事務的取消),那么若僅簡單的使用兩個Insert Into語句的話,若是在第一個語句執行完畢后,在第二個語句尚未完成時就發生了故障,這時第一個語句產生的效果是沒法消除的了。如果我們將這整個的過程定義為一個事務,事務沒有完整的結束就Roll Back所有的影響不就達到了要求嗎?這在SQL Server中可以用Begin Transaction和Commit Transaction來完成的,例子如下:
Create StoredProcedure insert_loan
As
Begin transaction
Inset into Loan (Loan_ID,Loan_Data,Loan_amount)
Values(?,?,?)
Inset into Loan (Loan_ID,Loan_Data,Loan_amount,Loan_Describle)
Values(?,?,?,?)
Commit Transaction
  好了,這看上去好象沒有什么不同吧,但需要注意的是我們現在將兩個Insert into語句作為了一個的事務來處理,只有兩個Insert into語句都完成的話才是一個整體的事務結束,那么它才會去作用這個數據庫中的兩個表,若在事務中發生了故障的話,則所有的影響將取消(Roll Back)。好了,這樣的處理是只有在SQL Server中用StoredProcedure才能完成的。ANSI的SQL當然就不行了。這里講的大家可能不太明白,你可以參看SQL Server的手冊來作更多的了解。
  下面我們來看最后的一個對象─RecordSet對象,也是屬性和方法最多的一個了。我們使用的頻率也是最高的一個,在這之后,我還想談談ADO與ORACLE的一些問題。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 通河县| 抚松县| 静乐县| 社旗县| 体育| 平顺县| 灵石县| 泊头市| 南华县| 滁州市| 龙里县| 兴海县| 金乡县| 南充市| 酉阳| 毕节市| 上蔡县| 邓州市| 门头沟区| 玛纳斯县| 乌苏市| 鹤壁市| 筠连县| 长海县| 耒阳市| 中西区| 南靖县| 莲花县| 宁波市| 民勤县| 崇文区| 肇源县| 安泽县| 宁明县| 龙海市| 宝兴县| 安图县| 三穗县| 温泉县| 山丹县| 怀集县|