ASP与存储过程(基础到高级)一

合集下载

ASPNet学习之常用SQL存储过程剖析

ASPNet学习之常用SQL存储过程剖析

学习之常用SQL存储过程在项目中使用存储过程,首先可以提高数据库的安全性,其次可以提高运行SQL代码运行的速度,在大型项目中一般是必不可少的。

Visual 为SQL的存储过程提供了强大的支持,您既可以通过visual 来新建存储过程,也可以直接在Sql Server的查询分析器中运行,还可以通过企业管理器创建,使用起来也非常方便。

大家一直都误认为SQL 存储过程是一个比较“高深”的技术,其实掌握一般的语法是没有什么大问题的,而我们在使用存储教程中也主要是增删减的操作,学会使用一般的T-SQL就很容易上手了。

我们先来看一下在Sql-server中是如何创建一个存储过程的吧,我们可以使用SQL命令语句创建,也可以通过SQL server中的企业管理器来创建,但其实都是离不开自己写语句的,当然系统存储过程我们就不用去动它了(存储过程分为系统存储过程,本地存储过程,临时存储过程,远程存储过程,扩展存储过程),而本地存儲過程就是我們自己編寫的存储过程,其实也叫用户存储过程。

当创建存储过程时需要确定存储过程的三个组成部分所有的输入参数以及传给调用者的输出参数被执行的针对数据库的操作语句包括调用其它存储过程的语句返回给调用者的状态值以指明调用是成功还是失败一、存储过程创建1.用企业管理器来创建存储过程;我们先打开企业管理器,找到我们要创建存储过程的数据库,如图一:我们可以看到,在数据库里面有一个存储过程的项目,我们要用到的就是它了,选中存储过程这项,我们可以看到数据库中里面本身就有很多存储过程存在的了,不过这些都是数据库本身自带的,我们可以看到他的类型是系统(如图二),如果我们自己创建的存储过程,类型就是用户了.在控制树的左边,我们选中存储过程后单击鼠标右键,可以看到有一个“创建存储过程的选项”选中这项,就会出现新的窗口了,这个窗口就是用来写存储过程的了在实际运用过程中,我们所创建的存储过程并不是想像中的这么复杂,而上面的这些参数也不是都要用上,但一般我们在用查询分析器创建存储过程前,都会通过下面这条语句来查询一下,在数据库中是否已经存在相同命名的存储过程,如果存在的话,则先删除。

第1章ASP使用基础(共10张PPT)

第1章ASP使用基础(共10张PPT)
第一页,共十页。
1.1 web基础知识
一、Web与URL 1. WEB (万维网)、客户机/服务器工作模 式 。 (móshì) 2. URL(统一资源定位器)
<方式>://<主机名></目录></文件名>
方式:http;ftp;telnet;file
主机名:(1)ip 如 192.168.0.7 (2)dns 机器名.单位名.单位类别.国别 如:
Web浏览器
请求(qǐngqiú) 响应
Web服务器
<html> <code>
</html.
<html> <p>你好
</html>
应用程序服务器
第六页,共十页。
用户在浏览器的地址栏中键入ASP文件,并回车触发这个ASP的申请。 浏览器将这个ASP的请求发送到给Web服务器。
Web Server接收这些申请并根据.asp的后缀名判断这是ASP要求。 Web Server 从硬盘或内存(nèi cún)中读取正确的ASP文件。
第四页,共十页。
ASP的工作(gōngzuò)原理
1 静态网页(普通HTML的执行(ห้องสมุดไป่ตู้híxíng)过程)
Browser
请求(qǐngqiú) 响应
Server
<html>
<p>你好 </html>
第五页,共十页。
ASP的工作(gōngzuò)原理
2、动态网页(wǎnɡ yè)(ASP的执行过程)
第1章 ASP使用基础。1. WEB (万维网)、客户机/服务器工作模式。<方式>://<主 机名></目录></文件名>。主机名:(1)ip 如 192.168.0.7。如: 。使用附加组件可以扩展Active Server Pages。1 静态网页(普 通HTML的执行(zhíxíng)过程)。Web Server 从硬盘或内存中读取正确的ASP文件。 1.3.2 PWS的安装和设置。脚本命令

ASP调用存储过程的方法

ASP调用存储过程的方法

ASP调用存储过程的方法大家知道ASP调用存储过程吗?ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过。

我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那幺回事。

 1 这也是最简单的方法,两个输入参数,无返回值: set connection = server.createob ject(“adodb.connection”) connection.open someDSN Connection.Execute “procname varvalue1, varvalue2” &#39;将所有对象清为nothing,释放资源 connection.close set connection = nothing 2 如果要返回Recordset 集: set connection = server.createob ject(“adodb.connection”) connection.open someDSN set rs = server.createob ject(“adodb.recordset”) rs.Open “Exec procname varvalue1, varvalue2”,connection 将所有对象清为nothing,释放资源 rs.close connection.close set rs = nothing set connection = nothing 3 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。

 首先说明,返回值有两种。

一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。

 这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?) 存储过程如下: use pubs GO -- 建立存储过程 create procedure sp_PubsTest -- 定义三个参数变量,注意第三个,特别标记是用于输出 @au_lname varchar (20), @intID int, @intIDOut int OUTPUT AS SELECT @intIDOut = @intID + 1 SELECT * FROM authors WHERE au_lname LIKE @au_lname + &#39;%&#39; --直接返回一个值 RETURN @intID + 2 相信大家已经了解ASP调用存储过程了吧!。

第1章 ASP基础

第1章  ASP基础
ASP 程序设计及应用
第1章 ASP基础 ASP基础
1.1 静态网页与动态网页 1.2 ASP概述 ASP概述 1.3 ASP的运行 ASP的运行
1.1 静态网页与动态网页
Web采用一种被称为“瘦客户机”的技术,使用B/S Web采用一种被称为“瘦客户机”的技术,使用B/S (Browser/Server,浏览器/服务)模型。 Browser/Server,浏览器/
Server Browser 请求 响应
1.1 静态网页与动态网页
根据Web 服务器向Web 浏览器发送页面的 根据 Web服务器向 Web浏览器发送页面的 内容可将网页分为两种:静态网页和动态网 页。 静态网页是指对于所有访问该网页的用户来 说,在其客户端浏览器的显示内容都是一样 的 。 又称为“ 普通HTML 网页” , 其文件的 又称为 “ 普通 HTML网页 ” 扩展名为.htm或 html。 扩展名为.htm或.html。 动态网页会根据用户的不同需求显示不同的 内容。 内容。
<%@ LANGUAGE = "VBScript" %> <HTML><TITLE>我的第一个ASP程序</TITLE> <HTML><TITLE>我的第一个ASP程序</TITLE> <BODY> <% For i = 3 To 7 %> <FONT size=<% = i %>> 欢迎光临!<BR> 欢迎光临!<BR> </FONT> <% Next %> </BODY> </HTML>
所有的 ASP 命令都必须包含在 < % 和 %> 之内 , 如: < % =date %> , ASP 通过包含在 < % 和 %> 中的表达式将执行结果输出 到客户浏览器

asp.net中调用存储过程的方法

asp.net中调用存储过程的方法

中调⽤存储过程的⽅法本⽂实例讲述了中调⽤存储过程的⽅法。

分享给⼤家供⼤家参考,具体如下:⼀、建⽴并调⽤⼀个不带参数的存储过程如下:CREATE PROCEDURE 全部学⽣<dbo.selectUsers>AS SELECT * FROM 学⽣GOEXEC 全部学⽣建⽴并调⽤⼀个带参数的存储过程如下:CREATE PROCEDURE 学⽣查询1@SNAME VARCHAR(8),@SDEPT VARCHAR(20)AS SELECT * FROM 学⽣ WHERE 姓名=@SNAME AND 所在系=@SDEPTGOEXEC 学⽣查询1 '张三','计算机系'或:EXEC 学⽣查询1 @SNAME='张三',@SDEPT='计算机系'(2)删除存储过程:DROP PROCEDURE<存储过程名组>⼆、在中调⽤存取过程:DBHelper.cs//不带参数public static DataTable GetList(string sqlDBO){DataSet ds = new DataSet();SqlCommand cmd = new SqlCommand(sqlDBO, Connection);mandType = CommandType.StoredProcedure; //指定命令类型为存储过程SqlDataAdapter da = new SqlDataAdapter(cmd);da.Fill(ds);return ds.Tables[0];}//带参数public static DataTable GetList(string sqlDBO,params SqlParameter[] values){DataSet ds = new DataSet();SqlCommand cmd = new SqlCommand(sqlDBO, Connection);mandType = CommandType.StoredProcedure; //指定命令类型为存储过程cmd.Parameters.AddRange(values);//cmd.Parameters.AddWithValue("@参数1", 值1);//cmd.Parameters.AddWithValue("@参数2", 值2);SqlDataAdapter da = new SqlDataAdapter(cmd);da.Fill(ds);return ds.Tables[0];}UsersService.cs//不带参数public static IList<Users> GetUserList(){List<Users> list = new List<Users>();DataTable table = DBHelper.GetList("存储过程名称");foreach (DataRow row in table.Rows){Users users = new Users();users.Id=(int)row["id"];erName=(string)row["userName"];users.Password=(string)row["password"];list.Add(users);}return list;}//带参数public static IList<Users> GetUserList(string userName,string password){List<Users> list = new List<Users>();SqlParameter[] para=new SqlParameter[]{new SqlParameter("@userName",userName),new SqlParameter("@password",password)};DataTable table = DBHelper.GetList("存储过程名称",para);foreach (DataRow row in table.Rows){Users users = new Users();users.Id=(int)row["id"];erName=(string)row["userName"];users.Password=(string)row["password"];list.Add(users);}return list;}更多关于相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》。

ASP中巧用存储过程.

ASP中巧用存储过程.

ASP中巧用存储过程在许多网页上,用户都可以通过简单地选择列表中的一项来输入一个国家或州的名字,在大多数情况下,我们通常使用ASP来生成这个列表,创建生成这个列表的函数并把它们保存在一个Include文件中。

然而,ASP需要额外的时间在服务器上加载并处理这些Include文件,此外,每次生成一个选择列表时,服务器都必须加载整个Include文件。

在最近为一个客户建立网站时,我有了一个新的想法,把这些函数放在存储过程而不是Include文件中,让存储过程来生成选择清单。

下面的代码将生成一个选择清单的记录。

首先,使用T-SQL的串联功能建立一个从记录集中生成选择清单的Select 语句:Alter Procedure "getOptionListStates"Asselect (''+ rtrim( FullName) + '')as OptionList from states执行getOptionListStates存储过程可以生成下面的记录:North CarolinaSouth CarolinaWashingtonVirginia当然,还可以直接把选择列表放在数据库中。

接下来可以修改存储过程返回一个包含全部选择列表元素的单一变量,然后把这一变量返回给HTML的Select语句即可。

虽然没有详细地比较使用存储过程和ASP这两种方法之间在性能上的差异,但我发现使用存储过程这种技术最有趣的地方是可以使用SQL Server自动地生成一部分以前我们需要在ASP中完成的HTML代码,采用这种混合方式生成ASP代码在性能和灵活性上要优于纯ASP代码。

例如,一旦建立了一个存储过程,就可以很方便地在不同的应用中进行调用,甚至是在不同服务器上的应用中进行调用,如果把所有的代码都放在Include文件中要做到这一点是很困难的。

在Asp中使用存储过程

在Asp中使用存储过程

SELECT @link_id = @@IDENTITY
END
ASP调用带参数存储过程的几种方式
作者:中国论坛网收集 来源: 加入时间:2004-8-25
作者: 讨饭猫
ASP调用带参数存储过程的几种方式
With objCmd
.ActiveConnection = conn 'You can also just specify a connection string here
.CommandText = "sp_InsertArticle"
.CommandType = adCmdStoredProc 'Requires the adovbs.inc file or typelib meta tag
asp存储过程使用大全
() 2002-2-19 (请双击自动滚屏观看,单击停止,再击..)
1,调用没有参数的存储过程
<%
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("mand")
'Instantiate objects
Set objConn = Server.CreateObject("ADODB.Connection")
set objCmd = Server.CreateObject("mand")
conn.Open Application("ConnectionString")
如何在ASP中调用SQL存储过程

两种方法实现在ASP.NET中调用存储过程

两种方法实现在ASP.NET中调用存储过程

Sl a A atr a=n wS laa d pe0 qD t dpe a d e qD t a t ; A r d.e cC m n aSl to mad=nwS lo ad ; e e qC mm n O
d . ee t o aS l c C mma d. n e to = c nn n Co n c in o ; d .eet o aS lc C mma d. mma d e t= ” me P o e u e : n Co nTx Na Of rc d r ” d .eet o aS lc C mma d. mma d p n Co n Ty e= C o
2 使用 存储 过程 的好 处 .
相对于直接使用 S QL语 句 ,在 应 用 程 序 中直 接 调 用 存 储 过 程 有 以 下好 处 : ()减少 网络 通信 量 。调 用 一 个行 数 不 多 的 存储 过 程 与 直 接调 用 1
p r m. r c i n= P r me e Die t n I p t a a Die t o a a tr r ci . u ; o n
【 关键词】 e; . t存储过程 ; n 数据库 ; 语句; 执行 ; 应用程序 ; 代码 ; 函数
0 引 言 .
在使 用 .E N T的过 程 中 , 据 库 访 问 是 一 个 很 重 要 的部 分 , 别 是 数 特 在 BS系统 的 构 建 过 程 中 . / 数据 库 操 作 几 乎 成 为 了一 个 必 不 可 少 的操 作 。调 用存 储 过 程 实现 数 据 库 操作 使 很 多 程 序 员 使 用 的 方 法 , 且 大 而 多 数 的 程 序 员 都 是 能 使 用 存 储 过 程 就 使 用 存 储 过 程 ,很 少 直 接 使 用 S L语 句 . 以存 储 过 程 是 很有 用 而 且 很 重 要 的 。 Q 所
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ASP与存储过程(孙来泉)一直以来,有关存储过程(Stored Procedure)的使用问题在软件开发领域一直是个争论比较集中的对象。

这种争论的现象比较有趣,因为没有任何一个程序员质疑存储过程的作用和对程序带来的效率提升,但争论仍然持续。

存储过程是把一条或多条数据库查询语句封装在一个逻辑内部,而这个“逻辑”存放的地点是数据库服务器而不是直接书写在程序代码中。

既存储过程存在于数据库中,程序只是负责向存储过程输入参数并得到存储过程返回的值。

以应用广泛的面向互联网的网络服务器为例。

假设web服务器和数据库服务器都架设在网络服务器上(1台服务器上安装web服务和数据库服务),存储过程的优势表现的相对较小,因为网络服务器的CPU和内存资源是固定的。

但如果网络服务器中的web服务器和数据库分别架设在两台或多台服务器群(或群组)上,性能上的优势是不言而喻的,而现实恰恰是web服务器和数据库分置架设。

程序员的任务是书写代码,而代码是有着相对固定的规范,或遵循某种原则的,比如C或perl等。

而存储过程不同,它是基于SQL语言的,而且全都是SQL语言。

另外,由于数据库的标准不统一,各种流行数据库的SQL规则多有区别,程序员在面向各种应用情况时需要配置不同的数据库方案,不同的数据库在存储过程的SQL规则和书写规范上要求不同,额外增加了程序员的工作量,导致了额外的学习时间和学习成本。

这是我认为的,关于存储过程存在争论的原因之一。

目前在web领域应用的数据库主要有以下几种,基于微软平台的Access、MS SQL Server,基于跨平台的MySQL,Oracle以及近年来兴起的嵌入式数据库SQLite。

除Access被微软定义为Office办公套件而没有提供存储过程外,其余集中数据库均支持存储过程。

本文试图从目前应用数量最大的微软MS SQL Server为例说明存储过程的使用方法。

基于存储过程的使用环境,本文以ASP为主要讲解内容。

虽然是微软新推出的.net框架中的核心技术,是Ado的.net版本。

但考虑到Asp对开发速度,应用范围和用户认可等方面的原因并本着“知其所以然”的角度,本文仍以Asp为重点讲解。

中的存储过程应用,我会在随后发文说明。

在开始正文之前,我想先说明一下使用存储过程的好处:第一、大大提高效率。

存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。

第二、提高安全性。

因为查询数据库的SQL语句绝大部分封装在存储过程而不是程序代码中,这样即便代码泄漏,并不会对数据库造成灾难性的影响。

第三、有利于SQL语句的重用。

在ASP中,一般通过command对象调用存储过程,根据不同情况,本文也介绍其它调用方法。

为了方便说明,根据存储过程的输入输出,作以下简单分类:1. 只返回单一记录集的存储过程假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明):/*SP1*/CREATE PROCEDURE dbo.getUserListasset nocount onbeginselect * from dbo.[userinfo]endgo以上存储过程取得userinfo表中的所有记录,返回一个记录集。

通过command对象调用该存储过程的ASP代码如下:'**通过Command对象调用存储过程**DIM MyComm,MyRstSet MyComm = Server.CreateObject("mand")MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串mandText = "getUserList" '指定存储过程名mandType = 4 '表明这是一个存储过程MyComm.Prepared = true '要求将SQL命令先行编译Set MyRst = MyComm.ExecuteSet MyComm = Nothing存储过程取得的记录集赋给MyRst,接下来,可以对MyRst进行操作。

在以上代码中,CommandType属性表明请求的类型,取值及说明如下:-1 表明CommandText参数的类型无法确定1 表明CommandText是一般的命令类型2 表明CommandText参数是一个存在的表名称4 表明CommandText参数是一个存储过程的名称还可以通过Connection对象或Recordset对象调用存储过程,方法分别如下:'**通过Connection对象调用存储过程**DIM MyConn,MyRstSet MyConn = Server.CreateObject("ADODB.Connection")MyConn.open MyConStr 'MyConStr是数据库连接字串Set MyRst = MyConn.Execute("getUserList",0,4) '最后一个参断含义同CommandTypeSet MyConn = Nothing'**通过Recordset对象调用存储过程**DIM MyRstSet MyRst = Server.CreateObject("ADODB.Recordset")MyRst.open "getUserList",MyConStr,0,1,4'MyConStr是数据库连接字串,最后一个参断含义与CommandType相同2. 没有输入输出的存储过程请看以下存储过程:/*SP2*/CREATE PROCEDURE dbo.delUserAllasset nocount onbegindelete from dbo.[userinfo]endgo该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:'**通过Command对象调用存储过程**DIM MyCommSet MyComm = Server.CreateObject("mand")MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串mandText = "delUserAll" '指定存储过程名mandType = 4 '表明这是一个存储过程MyComm.Prepared = true '要求将SQL命令先行编译MyComm.Execute '此处不必再取得记录集Set MyComm = Nothing当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command 对象吧。

3. 有返回值的存储过程在进行类似SP2的操作时,应充分利用SQL Server强大的事务处理功能,以维护数据的一致性。

并且,我们可能需要存储过程返回执行情况,为此,将SP2修改如下:/*SP3*/CREATE PROCEDURE dbo.delUserAllasset nocount onbeginBEGIN TRANSACTIONdelete from dbo.[userinfo]IF @@error=0beginCOMMIT TRANSACTIONreturn 1endELSEbeginROLLBACK TRANSACTIONreturn 0endreturnendgo以上存储过程,在delete顺利执行时,返回1,否则返回0,并进行回滚操作。

为了在ASP中取得返回值,需要利用Parameters集合来声明参数:'**调用带有返回值的存储过程并取得返回值**DIM MyComm,MyParaSet MyComm = Server.CreateObject("mand")MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串mandText = "delUserAll" '指定存储过程名mandType = 4 '表明这是一个存储过程MyComm.Prepared = true '要求将SQL命令先行编译'声明返回值Set Mypara = MyComm.CreateParameter("RETURN",2,4)MyComm.Parameters.Append MyParaMyComm.Execute'取得返回值DIM retValueretValue = MyComm(0) '或retValue = MyComm.Parameters(0)Set MyComm = Nothing在MyComm.CreateParameter("RETURN",2,4)中,各参数的含义如下:第一个参数("RETURE")为参数名。

参数名可以任意设定,但一般应与存储过程中声明的参数名相同。

此处是返回值,我习惯上设为"RETURE";第二个参数(2),表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下给出常用的类型代码:adBigInt: 20 ;adBinary : 128 ;adBoolean: 11 ;adChar: 129 ;adDBTimeStamp: 135 ;adEmpty: 0 ;adInteger: 3 ;adSmallInt: 2 ;adTinyInt: 16 ;adVarChar: 200 ;对于返回值,只能取整形,且-1到-99为保留值;第三个参数(4),表明参数的性质,此处4表明这是一个返回值。

此参数取值的说明如下:0 : 类型无法确定;1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值以上给出的ASP代码,应该说是完整的代码,也即最复杂的代码,其实Set Mypara = MyComm.CreateParameter("RETURN",2,4)MyComm.Parameters.Append MyPara可以简化为MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4) 甚至还可以继续简化,稍后会做说明。

相关文档
最新文档