asp.net
调用存储过程方法
|
关键词 asp.net;存储过程
存储过程简介
简单的说,存储过程是由一些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数据库中我们可以直接在查询分析器中敲入“存储过程名(参数列表)”样的字符串就可以执行存储过程,那么,是否可以把这种思想应用到应用程序中呢? |
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
ASP.NET2.0
中配置文件的加密与解密
作者:Webmaster 来源:Linuxdby.com 点击: 15 日期:2007-06-04 [收藏] [投稿] IE是否经常中毒?推荐您 <script type=text/javascript> </script>下载带有 Google 工具栏的 Firefox,上网冲浪更惬意 |
<script type=text/javascript> </script>
首先添加引用: using System.Web.Configuration;
加密操作如下:
private void ProtectSection(string sectionName, string provider) { Configuration config = WebConfigurationManager. OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.GetSection(sectionName);
if (section != null && !section.SectionInformation.IsProtected)
{ section.SectionInformation.ProtectSection(provider); config.Save(); } }
解密操作如下:
private void UnProtectSection(string sectionName) { Configuration config = WebConfigurationManager. OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.GetSection(sectionName);
if (section != null && section.SectionInformation.IsProtected) { section.SectionInformation.UnprotectSection(); config.Save(); } } 实践: 加密前的配置文件: <?xml version="1.0"?> <configuration> <appSettings> <add key="name" value="shy520" /> <add key="address" value="cnblogs" /> </appSettings> <system.web> <compilation debug="true"/> </system.web> </configuration> 加密后的配置文件: <?xml version="1.0"?> <configuration> <appSettings configProtectionProvider="DataProtectionConfigurationProvider"> <EncryptedData> <CipherData> <CipherValue> AQAAANCMnd8BFdERjHoAwE/Cl+s BAAAABi1ATlNkEUGEf0XyWGL2Xg QAAAACAAAAAAADZgAAqAAAABAAA ABIhxMWlazAntwIIpST1CDXAAAA AASAAACgAAAAEAAAAPz/YKYx07c b+h4fqdr4fkLgAAAAX1Ieyc+WSx AfsDW1vn2C/fXsG2TAnYeUgaCov 8e3nGFTHHsH91gLiqKregFPYzGR vW1xrez/3VwOmJI9eS7EFKrcXej NnHL66kg2iNRk3ntLNZlZtTs3cZ 9w63u47VKAjs6miWsGBz2GntL/9 UGHLELigrJcr3YJ+lsjOscExQnv HGvA48EfxpD+tEiFBtgXeHsFkQX cqGySshx16vCt2GUNUC3ZmEAhBh UsAFkPIYqelYHd4+m9a/xPe2tqw GIbla1wbW2NDEfrzJPwnkfmpNqR hXijKImipwXbDVYy6o0UAAAAs8D suYNOhJ7qAjJa2c/4eUC7sks= </CipherValue> </CipherData> </EncryptedData> </appSettings> <system.web> <compilation debug="true"/> </system.web> </configuration> |