SQL存储过程在.NET数据库中的应用
文章类别:ASP.NET技巧 | 发表日期:2005-1-10 |
--------------------------------------------------------------------------------
-
一.前言:
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。总的来说,存储过程具有以下一些优点:
◆存储过程允许标准组件式编程
◆存储过程能够实现较快的执行速度
◆存储过程能够减少
网络流量
◆存储过程可被作为一种安全机制来充分利用
本文作者将向大家介绍.NET数据库应用程序中存储过程的应用,以及如何将它与ADO.NET中的SqlDataAdapter对象、DataSet对象等结合使用以提高.NET数据库应用程序的总体性能。
二.系统要求:
开发工具:Visual Studio.
NET 数据库管理
系统:SQL Server 2000(其中包含了示例程序所用到的Pubs数据库)
三.创建一个简单的存储过程:
这里我将向大家介绍如何运用Visual Studio.NET IDE来创建存储过程。运用Visual Studio.NET IDE创建存储过程是非常容易和直观的,你只要在服务器资源管理器中导向到Pubs数据库并展开节点,就会发现包括存储过程在内的各种数据库对象,如图1所示。
在存储过程节点上点击右键便可弹出一个菜单,其中包含了“新建存储过程”的命令。新建一个存储过程后,IDE中的代码编辑窗口便出现如下所示的代码模板:
CREATE PROCEDURE dbo.StoredProcedure1
/*
(
@parameter1 datatype = default value,
@parameter2 datatype OUTPUT )
*/
AS
/* SET NOCOUNT ON */
RETURN
上面的代码模板符合简化的创建存储过程的语法规则,完整的语法规则如下:
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS
sql_statement [ ...n ]
限于篇幅,各个参数的含义在此就不多作介绍了,有兴趣的读者可以参考有关SQL Server 2000数据库
管理系统的资料。
下面我对该代码模板中的各个语法成分略作介绍。CREATE PROCEDURE声明创建一个存储过程,后面跟着该存储过程的名称。“/*……*/”中的成分是该存储过程的参数,可包括输入参数和输出参数。AS关键字后面的内容是该存储过程的主体部分,其中是任何数量和类型的包含在存储过程中的SQL语句。RETURN关键字表明存储过程结束并能返回整型状态值给调用者。
下面我们就来创建一个简单的不带参数的存储过程并运用之:
CREATE PROCEDURE dbo.up_GetPublisherInfo
AS
SELECT pub_id, pub_name, city, state, country
FROM publishers
RETURN
创建以上存储过程后,保存之。保存完毕,与该存储过程相对应的节点就会出现在服务器资源管理器中。同时请注意代码编辑窗口中的CREATE关键字变为ALTER关键字了,该关键字是用于更改任何现有的存储过程的。要运行上述存储过程,只要点击其节点并在右键弹出菜单中选择“运行存储过程”,运行的结果图示如下:
四.创建一个带参数的存储过程:
以上我们创建了一个简单的不带参数的存储过程,而在实际的应用中往往会用到很多带有参数的存储过程。带有参数的存储过程一般是用于更新数据或是插入数据的。下面我们可以运用同样的操作方法创建一个带参数的存储过程:
CREATE PROCEDURE dbo.up_UpdatePublisherInfo
(
@pub_id char (4),
@pub_name varchar (40),
@city varchar (20),
@state char (2),
@country varchar (30)
)
AS
UPDATE publishers
SET pub_name = @pub_name, city = @city, state = @state,