浅析基于.NET的数据库存储过程应用
2017-05-30魏宏昌王英杰梁晓强王志娟张朝亮
魏宏昌 王英杰 梁晓强 王志娟 张朝亮
摘 要:数据是软件的重要组成部分,特别是在B/S系统中数据库访问是一个读写数据操作很重要的部分,而通过存储过程实现数据库访问是很多软件使用的方法。本文介绍ASP.NET 数据库应用程序调用SQL Server数据库管理系统中的存储过程的方法,以及使用存储过程的优势和注意事项。
关键词:存储过程;数据库;应用
1 前言
SQL Server数据库管理系统是目前最流行的关系型数据库管理系统之一,主要包括数据库、表、视图,还有函数、存储过程、触发器等可编程性对象。那什么是存储过程呢?存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码就像C#中的一个方法一样,实现一些功能比如對单表或多表的增删改查。
在SQL Server数据库管理系统中容易混淆的有函数和存储过程两个对象,它们两个其实还是有很大区别的,主要体现在以下几点:
(1)一般来说,存储过程的功能要复杂一点,而函数是简短而有针对性的。
(2)存储过程可借助output返回参数,而函数只能返回值或者数据集。
(3)存储过程是作为一个独立的部分来执行,而函数可以作为Select语句的一部分,由于函数可以返回一个数据集,因此函数可以在查询语句中位于FROM关键字的后面,存储过程则不能。
2 存储过程的优点
存储过程作为SQL Server数据库管理系统的重要对象,提供了许多标准SQL语言中所没有的高级特性,主要表现在以下几个方面:
(1)执行速度更快。
(2)允许模块化程序设计。
(3)提高系统安全性。
(4)减少网络流通量。
3 存储过程的分类
存储过程大致分为以下这些分类:没有输入输出的存储过程、有返回值的存储过程、只返回单一记录集的存储过程、返回多个记录集的存储过程、有输入参数和输出参数的存储过程、同时具有返回值和输入与输出参数的存储过程、同时有返回值和记录集的存储过程。
下面我们以SQL Server自带的Northwind数据库为例,定义一个添加区域名称操作,并返回这个操作影响的行数,同时还要获取新添加的区域名的ID以及所有区域名的记录集。定义存储过程的SQL语句:
CREATE PROCEDURE uspRegion @regionId int output,@regionDescription nchar(50)
AS insert into Region(RegionDescription)values(@regionDescription)
set @regionId = @@IDENTITY select * from Region return @@rowcount
4 在ASP.NET程序里调用存储过程
要访问数据库就要用到ADO.NET去操作,使用其中的Connection对象连接数据库,再使用Command对象执行SQL语句或存储过程,返回值和输出参数都要使用Command对象获得,如果有返回的数据集,还要使用DataAdapter对象将数据集填充到DataSet对象里。
我们使用上面定义的存储过程,使用ASP.NET执行添加区域名操作,我们先创建一个ASP.NET页面,用一个名为txtDesc的文本框控件作为区域名的输入,用名为gvRegion的数据表格控件显示所有区域信息,用名为lblInfo的标签控件显示添加操作的结果和新区域名的ID。提交按钮的后台代码如下:
SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = “ uspRegion “;
cmd.CommandType = CommandType.StoredProcedure;
IDataParameter[] pa = {new SqlParameter(“@regionId”,SqlDbType.Int,4),
new SqlParameter(“@regionDescription”,SqlDbType.NChar,50),new SqlParameter(“val”,SqlDbType.Int,4)};
pa[0].Direction = ParameterDirection.Output;pa[1].Value = txtDesc.Text;
ps[2].Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(pa[0]);cmd.Parameters.Add(pa[1]);cmd.Parameters.Add(pa[2]);
SqlDataAdapter da = new SqlDataAdapter(cmd);DataSet ds = new DataSet();da.Fill(ds);
gvRegion.DataSource = ds.Tables[0];gvRegion.DataBind();
lblInfo.Text = “操作行:" +pa[2].Value.ToString()+ ",新ID为" + pa[0].Value.ToString();
5 结语
本文讨论了SQL Server中的存储过程的概念、分类和优缺点,并通过一个实例和代码描述了在ASP.NET程序里调用带输入输出参数已经返回数据集的存储过程。从中我们发现,通过使用存储过程,可以提高数据的独立性和逻辑性,还能提高程序的安全性与可扩展性。
参考文献
[1]周慧,施乐军.数据库技术及应用[M].人民邮电出版社,2015.
[2]高宏.ASP.NET典型模块与项目实战大全[M].清华大学出版社,2014.
(作者单位:石家庄信息工程职业学院)