B/S模式下调用存储过程的改进方法

2013-06-25 08:45陈星豪
中国信息化·学术版 2013年3期
关键词:S模式

陈星豪

【摘 要】B/S系统中调用存储过程能减少网络通信量,执行速度更快且具有更强的适应性,合理使用存储过程对B/S系统构建具有重要的优化作用。传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护。本文提出了一种新的方法,在原有调用方法的基础上进行改进,在一定程度上解决了这些问题。

【关键词】B/S模式;存储过程;SQL数据库;

【中图分类号】TP391.13 【文献标识码】A 【文章编号】1672-5158(2013)03-0089-01

0 引言

根据返回值类型的不同,我们可以将存储过程分为三类:返回记录集的存储过程,返回数值的存储过程(也可以称为标量存储过程),以及行为存储过程。顾名思义,返回记录集的存储过程的执行结果是一个记录集,典型的例子是从数据库中检索出符合某一个或几个条件的记录[2];返回数值的存储过程执行完以后返回一个值,例如在数据库中执行一个有返回值的函数或命令[3];最后,行为存储过程仅仅是用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。

1两种不同的存储过程调用方法

为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的传统方法。另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后不再一一说明。本文所有例子均采用C#语言。

要在应用程序中访问数据库,一般性的步骤是:首先声明一个数据库连接SqlConnection,然后声明一个数据库命令SqlCommand,用来执行SQL语句和存储过程。有了这两个对象后,就可以根据自己的需要采用不同的执行方式达到目的。需要补充的是,不要忘记在页面上添加如下的引用语句:using System.Data.SqlClient。

就执行存储过程来说,如果执行的是第一类存储过程,那么就要用一个DataAdapter将结果填充到一个DataSet中,然后就可以使用数据网格控件将结果呈现在页面上了;如果执行的是第二和第三种存储过程,则不需要此过程,只需要根据特定的返回判定操作是否成功完成即可。

(1)执行一个没有参数的存储过程的代码如下:

SqlConnection conn=new SqlConnection(“connectionString”);

SqlDataAdapter da = new SqlDataAdapter();

da.SelectCommand = new SqlCommand();

da.SelectCommand.Connection = conn;

da.SelectCommand.CommandText = "NameOfProcedure";

da.SelectCommand.CommandType = CommandType.StoredProcedure;

然后只要选择适当的方式执行此处过程,用于不同的目的即可。

(2)执行一个有参数的存储过程的代码如下(我们可以将调用存储过程的函数声明为

ExeProcedure(string inputdate)):

SqlConnection conn=new SqlConnection(“connectionString”);

SqlDataAdapter da = new SqlDataAdapter();

da.SelectCommand = new SqlCommand();

da.SelectCommand.Connection = conn;

da.SelectCommand.CommandText = "NameOfProcedure";

da.SelectCommand.CommandType = CommandType.StoredProcedure;

(以上代码相同,以下为要添加的代码)

param = new SqlParameter("@ParameterName",SqlDbType.DateTime);

param.Direction = ParameterDirection.Input;

param.Value = Convert.ToDateTime(inputdate);

da.SelectCommand.Parameters.Add(param);

这样就添加了一个输入参数。若需要添加输出参数:

param = new SqlParameter("@ParameterName",SqlDbType.DateTime);

param.Direction = ParameterDirection.Output;

param.Value = Convert.ToDateTime(inputdate);

da.SelectCommand.Parameters.Add(param);

若要获得参储过程的返回值:

param = new SqlParameter("@ParameterName",SqlDbType.DateTime);

param.Direction = ParameterDirection.ReturnValue;

param.Value = Convert.ToDateTime(inputdate);

da.SelectCommand.Parameters.Add(param);

从上面的代码我们可以看出,当存储过程比较多或者存储过程的参数比较多时,这种方法会大大影响开发的速度;另外一方面,如果项目比较大,那么这些用于数据库逻辑的函数在以后的维护中也是一个很大的负担。

想到在执行没有参数的存储过程时只需要传入一个存储过程的名字就可以调用相应的存储过程,而且在SqlServer数据库中我们可以直接在查询分析器中敲入“存储过程名(参数列表)”样的字符串就可以执行存储过程,于是在编译器中键入相应代码。这些代码是在调用不带参数的存储过程的代码的基础上改的。具体代码如下:

SqlConnection conn=new SqlConnection(“connectionString”);

SqlDataAdapter da = new SqlDataAdapter();

da.SelectCommand = new SqlCommand();

da.SelectCommand.Connection = conn;

da.SelectCommand.CommandText = "NameOfProcedure( para1,para2,para3)";

da.SelectCommand.CommandType = CommandType.StoredProcedure;

为了使代码更具有代表性,要调用的存储过程的第一个和第二个参数都为字符串类型,第三个参数为整型。

2两种调用方法的比较

第二种方法具有一个很明显的优点,即可以提高开发速度,节省开发时间,代码容易维护,在一定程度上也减少了系统大小。可以让开发人员少写很大一部分的代码。如果不需要获取输出参数和返回值,那么几乎可以做到“一劳永逸”。因此在实际的程序开发中,这种方法还是具有一定的实用价值的。

3结束语

本文在传统存储过程调用方法的基础上,提出了一种改进的调用方法,并用C#语言实现其过程,通过实验分析,结果表明,改进的调用方法,在一定程度上解决了速度慢、难以维护的缺点。

参考文献:

[1]李曼,王琰,赵益宇,等.基于基于关系数据库的大规模的存储模式研究[J].华中科技大学学报(自然科学版),2005,33(增刊):217-220.

[2] 李勇,李跃龙. 基于关系数据库存储OWL本体的方法研究[J].计算机工程与科学,2008,30(7):105-107.

猜你喜欢
S模式
学生考勤系统开发
基于Web的毕业设计管理系统设计与实现
明日博客系统的设计与实现
集团公司OA系统的研究与开发
S模式空管二次雷达询问与监视技术研究
铝材B2B电子商务系统设计与实现 
基于ASP.NET的就业见习管理信息系统设计与实现
基于B/S模式的数据结构实验平台设计
航空发动机管理信息系统研究
基于USB存储设备的透明监控系统