分享
 
 
 

用存储过程实现ASP对数据库访问

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

一、ADO概述

ActiveX 数据对象 (ADO) 是一种既易于使用又可扩充的技术,用来将数据库访问添加到您的 Web 页可以使用 ADO 编写简洁和可升级的脚本以连接到与 OLE DB 兼容的数据源,如数据库、电子表格、顺序数据文件或电子邮件目录。OLE DB 是一个系统级的编程接口,它提供一套标准的 COM 接口,用来展示数据库管理系统的功能。使用 ADO 的对象模型,您可以轻松地(使用 VBScript 或 JScript 等脚本语言)访问这些接口并将数据库功能添加到您的 Web 应用程序中。另外,您还可以使用 ADO 访问与开放式数据库互连 (ODBC) 兼容的数据库。

如果您是一位对数据库互连知识有一定了解的脚本编写者,您将会发现 ADO 的命令语法很简单,而且很容易使用。如果您是一位经验丰富的开发人员,您将会非常欣赏 ADO 提供的这种可升级的对各种数据源的高性能访问。

二、访问数据库的一般方法

一般的网页访问中访问数据库是按照下列步骤进行的,首先建立一个ADODB.Connection 接口的对象,接着在这一个对象上绑定相应的数据源(可以用有名数据源和无名数据源),根据需要建立或者不建立记录集,然后在该数据源上链接用执行或打开的方法来对相应的表进行操作。

Asp访问数据库的一般方法:

<

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的使用方法,如果是有名链接,设为数据源test,用户名和口令均为空,则只需要改写一下上述语句oConn.open “test”,””,””

上面简要介绍了一下对于网页中涉及到数据库访问的一般方法,这些已经是很成熟的,也是很有用的,如果在实际中对于某些数据的存取过于复杂,需要近10条SQL语句才能写完,那么这种方法就有点欠缺,另外有些时候需要使用相同的处理过程,而在不同的网页中使用,而这用存储过程则是最有利的,还有一个最大特点是存储过程对于技术的保密性相对高些,它存储于远端服务器的数据库内。

三、存储过程在ASP中的使用

在ADO中提供了对存储过程的访问,它需要用到command对象,在这个对象上用户可以直接执行SQL服务器的存储过程,而命令中所需要的参数可以借助于其属性Pamaters来进行处理。

注意 一个 Command 对象要想有效,必须和一个 Connection 对象相关联,方法是Command 对象的 ActiveConnection 属性就被设置到这个 Connection 对象。如果一个 Connection 对象不能被标识,在您将它与一个连接关联之前,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,口令为空,连接为本地服务器上的数据库

strConn="Provider=SQLOLEDB;User ID=sa;Initial Catalog=pubs;Data Source="& Request.ServerVariables("SERVER_NAME")

'如果连接一个远端的数据库,该数据库地址为: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和参数,参数由?引入

oCmd.CommandText = "{call byroyalty(?)}"

oCmd.Parameters.Append oCmd.CreateParameter("@Percentage", adInteger, adParamInput)

' 提供输入的参数

oCmd("@Percentage") = 75

‘在asp中上述输入参数的使用也可不用参数属性来实现直接用VB中的&来形成命令文本中对应的数据即可

‘参数的使用在输出时是特别有用的

Set oRs = oCmd.Execute

ors1.activeconnection=oconn

‘该命令对象中也可应用一般的SQL语句使用Source和open属性,其中source指出数据源

ors1.source ="select * from [tmptable] where 年份=2000 and 月份=1"

ors1.cursortype=adopenstatic

ors1.open

>

||||||四、在SQL中的存储过程简介

利用SQL的语言可以编写对于数据库访问的存储过程,其语法如下:

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表中某年的数据的存储过程

create proc select_query @year int as

select * from tmp where year=@year

在这里@year是存储过程的参数

例:该存储过程是从某结点n开始找到最上层的父亲结点,这种经常用到的过程可以由存储过程来担当,在网页中重复使用达到共享。

空:表示该结点为顶层结点

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个表中获取数据组合成一个通用的表,产生近2万条记录,而所需时间约7秒钟,如果这种操作借助于较合理的动态网页可以将服务器开发提高到一个高度,充分利用存储过程,可以减轻网页设计带来的繁重处理,而使所编写的代码得到共享和合理的利用,并将代码藏于服务器的数据库内部,使得一些技术得到的保密,这也是存储过程的一大特色,希望读者能从中得到启益。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有