国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

用存儲過程實現(xiàn)ASP對數(shù)據(jù)庫訪問

2019-11-18 19:25:29
字體:
來源:轉載
供稿:網(wǎng)友
一、ADO概述
ActiveX 數(shù)據(jù)對象 (ADO) 是一種既易于使用又可擴充的技術,用來將數(shù)據(jù)庫訪問添加到您的 Web 頁可以使用 ADO 編寫簡潔和可升級的腳本以連接到與 OLE DB 兼容的數(shù)據(jù)源,如數(shù)據(jù)庫、電子表格、順序數(shù)據(jù)文件或電子郵件目錄。OLE DB 是一個系統(tǒng)級的編程接口,它提供一套標準的 COM 接口,用來展示數(shù)據(jù)庫管理系統(tǒng)的功能。使用 ADO 的對象模型,您可以輕松地(使用 VBScript 或 JScript 等腳本語言)訪問這些接口并將數(shù)據(jù)庫功能添加到您的 Web 應用程序中。另外,您還可以使用 ADO 訪問與開放式數(shù)據(jù)庫互連 (ODBC) 兼容的數(shù)據(jù)庫。
如果您是一位對數(shù)據(jù)庫互連知識有一定了解的腳本編寫者,您將會發(fā)現(xiàn) ADO 的命令語法很簡單,而且很容易使用。如果您是一位經(jīng)驗豐富的開發(fā)人員,您將會非常欣賞 ADO 提供的這種可升級的對各種數(shù)據(jù)源的高性能訪問。
二、訪問數(shù)據(jù)庫的一般方法
一般的網(wǎng)頁訪問中訪問數(shù)據(jù)庫是按照下列步驟進行的,首先建立一個ADODB.Connection 接口的對象,接著在這一個對象上綁定相應的數(shù)據(jù)源(可以用有名數(shù)據(jù)源和無名數(shù)據(jù)源),根據(jù)需要建立或者不建立記錄集,然后在該數(shù)據(jù)源上鏈接用執(zhí)行或打開的方法來對相應的表進行操作。
asp訪問數(shù)據(jù)庫的一般方法:
<
Set oConn=Server.CreateObject(“ADODB.Connection”)
Set oRS=Server.CreateObject(“ADODB.RecordSet”)
set strConn="PRovider=SQLOLEDB;User ID=sa; Initial Catalog=Pubs;Data Source=" &request.ServerVariables("SERVER_NAME")
oConn.open strConn
set ORS=oConn.execute(“select * from test”)
>
以上介紹了無名鏈接的OLEDB的使用方法,如果是有名鏈接,設為數(shù)據(jù)源test,用戶名和口令均為空,則只需要改寫一下上述語句oConn.open “test”,””,””
上面簡要介紹了一下對于網(wǎng)頁中涉及到數(shù)據(jù)庫訪問的一般方法,這些已經(jīng)是很成熟的,也是很有用的,如果在實際中對于某些數(shù)據(jù)的存取過于復雜,需要近10條SQL語句才能寫完,那么這種方法就有點欠缺,另外有些時候需要使用相同的處理過程,而在不同的網(wǎng)頁中使用,而這用存儲過程則是最有利的,還有一個最大特點是存儲過程對于技術的保密性相對高些,它存儲于遠端服務器的數(shù)據(jù)庫內。
三、存儲過程在ASP中的使用
在ADO中提供了對存儲過程的訪問,它需要用到command對象,在這個對象上用戶可以直接執(zhí)行SQL服務器的存儲過程,而命令中所需要的參數(shù)可以借助于其屬性Pamaters來進行處理。
注意 一個 Command 對象要想有效,必須和一個 Connection 對象相關聯(lián),方法是Command 對象的 ActiveConnection 屬性就被設置到這個 Connection 對象。如果一個 Connection 對象不能被標識,在您將它與一個連接關聯(lián)之前,Command 對象是無效的。
< Dim oConn 
Dim strConn 
Dim oCmd 
Dim oRs,ors1 
dim aa
dim sql
Set oConn = Server.CreateObject("ADODB.Connection")
set oCmd = Server.CreateObject("ADODB.Command")
set ors1=Server.CreateObject("ADODB.RecordSet")
' 打開鏈接,使用用戶標識SA,口令為空,連接為本地服務器上的數(shù)據(jù)庫
strConn="Provider=SQLOLEDB;User ID=sa;Initial Catalog=pubs;Data Source="& Request.ServerVariables("SERVER_NAME")
'如果連接一個遠端的數(shù)據(jù)庫,該數(shù)據(jù)庫地址為:10.82.88.105,用戶為tmp,口令為123,
‘則可用下面的方法
‘ strConn="Provider=SQLOLEDB;User ID=tmp;pwd=123;Initial Catalog=tjbb;Data Source="& "10.82.88.110"
oConn.Open strConn
‘將建立的鏈接添加到命令的活動鏈接屬性中
Set oCmd.ActiveConnection = oConn
' 設置調用存儲過程byroyalty和參數(shù),參數(shù)由?引入
oCmd.CommandText = "{call byroyalty(?)}"
oCmd.Parameters.Append oCmd.CreateParameter("@Percentage", adInteger, adParamInput)
' 提供輸入的參數(shù)
oCmd("@Percentage") = 75
‘在asp中上述輸入?yún)?shù)的使用也可不用參數(shù)屬性來實現(xiàn)直接用VB中的&來形成命令文本中對應的數(shù)據(jù)即可
‘參數(shù)的使用在輸出時是特別有用的
Set oRs = oCmd.Execute 
ors1.activeconnection=oconn 
‘該命令對象中也可應用一般的SQL語句使用Source和open屬性,其中source指出數(shù)據(jù)源
ors1.source ="select * from [tmptable] where 年份=2000 and 月份=1"
ors1.cursortype=adopenstatic 
ors1.open
>
四、在SQL中的存儲過程簡介
利用SQL的語言可以編寫對于數(shù)據(jù)庫訪問的存儲過程,其語法如下:
CREATE PROC[EDURE] procedure_name [;number]
[
{@parameter data_type} [VARYING] [= default] [OUTPUT]
]
[,...n]
[WITH 
{
RECOMPILE 
| ENCRYPTION 
| RECOMPILE, ENCRYPTION
}
]
[FOR REPLICATION]
AS
sql_statement [...n]
[ ]內的內容是可選項,而()內的內容是必選項,
例: 若用戶想建立一個刪除表tmp中的記錄的存儲過程Select_delete可寫為:
Create Proc select_del As 
Delete tmp 
例:用戶想查詢tmp表中某年的數(shù)據(jù)的存儲過程
create proc select_query @year int as
select * from tmp where year=@year
在這里@year是存儲過程的參數(shù)
例:該存儲過程是從某結點n開始找到最上層的父親結點,這種經(jīng)常用到的過程可以由存儲過程來擔當,在網(wǎng)頁中重復使用達到共享。
空:表示該結點為頂層結點
fjdid(父結點編號) 
結點n 非空:表示該結點的父親結點號
dwmc(單位名稱)
CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output
as 
declare @stop int
declare @result varchar(80)
declare @dwmc varchar(80)
declare @dwid int
set nocount on
set @stop=1
set @dwmc=""
select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold 
set @result=rtrim(@dwmc)
if @dwid=0 
set @stop=0
while (@stop=1) and (@dwid<>0)
begin
set @dwidold=@dwid
select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold
if @@rowcount=0 
set @dwmc=""
else
set @result=@dwmc+@result
if (@dwid=0) or (@@rowcount=0) 
set @stop=0
else
continue
end
set @dwmcresult=rtrim(@result)
充分合理地利用存儲過程,可以提高服務器吞吐能力,筆者利用存儲過程來從近20個表中獲取數(shù)據(jù)組合成一個通用的表,產(chǎn)生近2萬條記錄,而所需時間約7秒鐘,如果這種操作借助于較合理的動態(tài)網(wǎng)頁可以將服務器開發(fā)提高到一個高度,充分利用存儲過程,可以減輕網(wǎng)頁設計帶來的繁重處理,而使所編寫的代碼得到共享和合理的利用,并將代碼藏于服務器的數(shù)據(jù)庫內部,使得一些技術得到的保密,這也是存儲過程的一大特色,希望讀者能從中得到啟益。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黑龙江省| 三台县| 宁德市| 长治县| 洛宁县| 吉木萨尔县| 墨竹工卡县| 宜阳县| 澄迈县| 察哈| 密云县| 义马市| 深圳市| 松滋市| 东莞市| 项城市| 屏山县| 原阳县| 尖扎县| 荔波县| 江北区| 鄢陵县| 西昌市| 宜昌市| 云安县| 卫辉市| 柘荣县| 卫辉市| 德令哈市| 西藏| 唐海县| 额济纳旗| 城市| 瑞安市| 涡阳县| 乌什县| 石城县| 安岳县| 武乡县| 邯郸县| 台北市|