在ASP.NET中调用存储过程方法新解

原创 2006年06月23日 09:23:00
【摘 要】存储过程的调用在B/S系统中用的很多。传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护。新的方法在一定程度上解决了这些问题。 关键词 ASP.NET;存储过程     在使用.NET的过程中,数据库访问是一个很重要 的部分,特别是在B/S系统的构建过程中,数据库操作几乎成为了一个必不可少的操作。调用存储过程实现数据库操作使很多程序员使用的方法,而且大多数的程 序员都是能使用存储过程就使用存储过程,很少直接使用SQL语句,所以存储过程是很有用而且很重要的。  存储过程简介   简单的说,存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留 在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来 调用,而且它们同样有输入参数和输出参数。   根据返回值类型的不同,我们可以将存储过程分为三类:返回记录集的存储过程, 返回数值的存储过程(也可以称为标量存储过程),以及行为存储过程。顾名思义,返回记录集的存储过程的执行结果是一个记录集,典型的例子是从数据库中检索 出符合某一个或几个条件的记录;返回数值的存储过程执行完以后返回一个值,例如在数据库中执行一个有返回值的函数或命令;最后,行为存储过程仅仅是用来实 现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。   使用存储过程的好处   相对于直接使用SQL语句,在应用程序中直接调用存储过程有以下好处:   (1)减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。   (2)执行速度更快。有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。   (3)更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。   (4) 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。   由以上的分析可以看到,在应用程序中使用存储过程是很有必要的。   两种不同的存储过程调用方法   为了突出新方法的优点,首先介绍一下在.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;   为了使代码更具有代表性,要调用的存储过程的第一个和第二个参数都为字符串类型,第三个参数为整型。执行以后发现,完全可以达到预期的效果!   两种调用方法的比较       通过比较我们可以看到,第二种方法具有一个很明显的优点,那就是可以提高开发速度,节省开发时间,而且代码容易维护,在一定程度上也减少了系统大小。但 是,由于对存储过程参数的处理比较笼统,如果要获取输出参数或者得到存储过程的返回值,这种方法就不能满足需要了。虽然如此,但是,这种方法毕竟可以让开 发人员少些很大一部分的代码。如果不需要获取输出参数和返回值,那么几乎可以做到“一劳永逸”。因此在实际的程序开发中,这种方法还是具有一定的实用价值 的。

asp.net调用存储过程方法新解

http://www.enet.com.cn/eschool/  2007年01月10日22:04  来源:   【文章摘要】 在使用.net的过程中,数据库访问是一个很重要的部分,特别是在b/s系...
  • zzy7075
  • zzy7075
  • 2013年03月28日 17:18
  • 464

asp.net调用js方法小结

asp.net调用js方法小结 key:asp.net js方法互调   asp.net 前台如何调用后台方法 1. javaScript函数中执行C#代码中的函数: 方法一:1、首先建立一...
  • GoodShot
  • GoodShot
  • 2013年02月22日 03:14
  • 4224

ASP.NET 后台调用前台javascript 的方法

从服务端调用客户端函数来操作,也就是在asp.net中调用javascript脚本中已经定义好的脚本函数。一般有以下几种方法 1. Response.Write : 比如在你单击按钮,先操作...
  • softuse
  • softuse
  • 2016年10月09日 11:35
  • 1179

Asp.net 后台调用js方法

1. 用Response.Write方法  代码如下: Response.Write("alert("XXX");");  此方只能调用内部函数,具体调用自定义的函数只能在Response.Write...
  • GrandShaw
  • GrandShaw
  • 2016年11月21日 13:49
  • 3301

ASP.NET中JavaScript 调用后台代码

前序:在不需要右击页面或回发的情况下刷新页面,即JS调用后台代码; 方法一:调用隐藏服务端按钮的点击事件        1、在前端放一个隐藏按钮,将需要调用的后台代码写入OnClick事件中;  ...
  • rosefly110
  • rosefly110
  • 2015年02月12日 18:06
  • 1451

RBAC新解:基于资源的权限管理(Resource-Based Access Control)

摘要:(原文地址:http://www.katasoft.com/blog/2011/05/09/new-rbac-resource-based-access-control)本文讨论以角色概念进行的...
  • youni808
  • youni808
  • 2014年05月12日 13:19
  • 3689

利用JQuery直接调用asp.net后台方法

利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法。 [WebMethod]   命名空间 1、无参数的方法调用, 注意:1.方法一定要静态方法,而且要有[WebM...
  • shan1774965666
  • shan1774965666
  • 2016年05月21日 14:41
  • 1278

Asp.Net 如何调用js中的函数function ?

http://bbs.csdn.net/topics/330215458 1、直接在前台调用 javascript 函数  很简单,在 head 元素之间加入 script 元素,将 ty...
  • DJ2008
  • DJ2008
  • 2013年09月28日 17:34
  • 5436

asp.net js方法互调 asp.net 前台如何调用后台方法

1. JavaScript函数中执行C#代码中的函数: 方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2、在前台写一个js函数,内容为document...
  • u011966339
  • u011966339
  • 2017年04月06日 16:21
  • 1060

ASP.Net中上传文件的几种方法

在做Web项目时,上传文件是经常会碰到的需求。ASP.Net的WebForm开发模式中,封装了FileUpload控件,可以方便的进行文件上传操作。但有时,你可能不希望使用ASP.Net中的服务器控件...
  • MonkeyProgirl
  • MonkeyProgirl
  • 2016年12月26日 08:52
  • 391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP.NET中调用存储过程方法新解
举报原因:
原因补充:

(最多只允许输入30个字)