开发者社区> 技术小胖子> 正文

网络工作室暑假后第二次培训资料(SQLServer存储过程和ADO.NET访问存储过程)整理(一)

简介:
+关注继续查看

因为昨天我的SQL Server 2008数据库在使用的时候突然就打不开了。而起前天还用它来写T-SQL语句来着。所以很是郁闷啊,到网上查询以后,不能解决,就干脆重新安装了一边,所以昨天整理的内容不能够及时的更新到博客上,只能今天继续整理,然后更新了。

这次主要是讲ADO.NET访问存储过程的知识,所以,在开篇的时候还是把SQL Server存储过程的知识给串讲,复习一下。

对于前段程序开发人员来说,存储过程是很重要的工具,他可以使开发者在不了解表架构的情况下使用存储过程对数据进行处理。同时,由于存储过程具有封装的概念,当逻辑规则改变时,可以在不影响前端程序设计的情况下对后端程序进行修改。

存储过程包括视图的所有的优点,视图只有select命令,而存储过程则包含了几乎所有的T-Sql命令。
存储过程可以很大的提高T-SQl命令的执行效率。
T-Sql语句在SQl Server 客户端执行的过程:

每次执行时都需要分析语句正确与否,优化与编译成执行计划,再对照SQl Server中是否有相同的执行计划。


一般的T-SQl命令重复执行时,会一直执行同样的分析,最优化,编译的工作,将耗费大量的CPU时间。

而是用存储过程则是只进行一次分析,优化,编译的过程,之后就直接依照SqlServer缓存中的执行计划直接执行。

优点:减少网络带宽的占用:因为存储过程是在SqlServer端执行,不需要和前端进行来回的沟通,相比之下就减少了在网络上传递包的带宽占用量,对于网络程序执行来说,使用存储过程能够减少对网络带宽的占用。

SqlServer存储过程的声明方式:

Create  proc存储过程名称

As

T-sql命令

SqlServer存储过程分为无参数存储过程和有参数存储过程

1)没有参数的存储过程

调用存储过程

Exec  存储过程名称;

这样的用法和视图差不多,但是视图不可以使用order by命令。而存储过程没有这样的限制。

示例1-1代码如下:



  1. --创建不带参数的存储过程

  2. create proc select_activity

  3. as

  4. --该存储过程所执行的sql命令

  5. select * from T_Activity;

SQL调用该存储过程



  1. --调用select_activity存储过程

  2. exec select_activity


有参数的存储过程

主要有三种类型的参数:

1)输入参数2)输出参数3)返回值

输入参数即在调用这个存储过程之前必须输入参数而该参数仅在程序中使用,并不会再返回给用户

基本的声明方式:

Create proc  存储过程名称

@输入参数名称1  数据类型,

@输入参数名称2  数据类型

As

T-sql命令

如果存在多个参数,就需要在各个输入参数间以逗号分隔 。如果参数是字符串或者日期,则需要用单引号括起来,而数字则不用。

备注:

存储过程通常不要编写太长,因为存储过程是在数据库端执行的,太长的话会影响执行效率;

示例1-2代码如下



  1. --创建带参数的存储过程

  2. create proc select_activity1

  3. --修改存储过程的语句

  4. --alter proc select_activity1

  5. --声明参数,多个参数有“,”号分隔符隔开,参数后面声明该参数的数据类型

  6. @id int,

  7. @activityName nvarchar(50)

  8. as

  9. --该存储过程所执行的Sql命令

  10. select * from T_Activity where id=@id and activityName=@activityName;

  11. --调用带参数的存储过程

  12. --如果参数是字符串或者日期,则需要用单引号括起来,而数字则不用。

  13. exec select_activity1 5,'比武招亲'

  14. --或者

  15. exec select_activity1

  16. @id=1,

  17. @activityName='比武招新';



存储过程中可以包含一些简单的编程语句

比如:if ,begin  ·····end····等语句

示例1-3代码如下:




  1. --在设置参数时,如果需要给设置的参数赋值,则在声明的参数后面加“=”后面跟所设置的初始值,这里设置的初始值为空

  2. create proc sele_activity

  3. @id int=null,

  4. @activityInfoId int=null

  5. as

  6. --使用的if语句来判断输入的参数值是否为空,如果为空则返回前端错误信息“请输入参数”,而且使用return立刻结束该存储过程

  7. if @id isnullor @activityInfoId isnull

  8. begin

  9.        raiserror('请输入参数',16,1)

  10. return

  11. end

  12. --执行的sql命令

  13. select * from T_Activity where id=@id or activityInfoId=@activityInfoId;

  14. --使用了没有给参数赋值的存储过程,返回错误

  15. --错误信息:“消息 50000,级别 16,状态 1,过程 sele_activity,第 7 行 请输入参数”

  16. exec sele_activity;

  17. --这样调用返回正确的结果

  18. exec sele_activity

  19. @id=2,

  20. @activityInfoId=8;


输出参数的存储过程

输出参数和输入参数刚好相反,输入参数只会在as一下活动,而输出参数则返回前端使用

输出参数的声明过程:

Createproc存储过程名称

@输入参数名称   数据类型

@输出参数名称   数据类型  output

As

T-Sql命令

在声明输出参数变量时,必须声明为output,存储过程执行完成以后会将输出参数返回前端

示例1-4代码如下:




  1. --创建select_MathResult的存储过程

  2. create proc select_MathResult

  3. --声明输出参数@activityName和参数的类型

  4. @activityName nvarchar(50),

  5. --声明输出参数,并使用output来表明该参数为输出参数

  6. @result intoutput

  7. as

  8. --使用T-SQL语句来返回相同activityName的数据行数

  9. select @result=count(*) from T_Activity where activityName=@activityName

  10. --调用存储过程,调用时先声明接受输出参数的参数@answer和该参数的类型

  11. declare @answer int

  12. exec select_MathResult '比武招亲' ,@answer output

  13. select'结果是',@answer

这样就完成了对Sql Server存储过程的复习,在下一篇文章将要介绍怎样使用ADO.NET访问存储过程。文章地址:http://yisuowushinian.blog.51cto.com/4241271/1016527




     本文转自yisuowushinian 51CTO博客,原文链接:http://blog.51cto.com/yisuowushinian/1016524,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
privoxy自动请求转发到多个网络
有些时候我们需要通过不同的代理访问不同资源,比如某些ip或域名走本地网络,某些ip或域名走不可描述的代理等。当然这只是举个栗子! 我要解决的问题是:我的内网机器没有internet访问权限,但是我的应用程序有部分请求是要访问intranet网络,而部分请求要访问internet网络。
1398 0
支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示
随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细。比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑。注意,这里是两个Web网站项目了,前端项目主要负责界面的呈现和一些前端的相应业务逻辑处理,而Web Api则负责提供数据。
1169 0
iis站点 asp.net网站访问弹出提示框
www.lovegarden.cc 这个网站已经出现2次这种情况了。 访问,弹出提示框,需要输入用户名和密码。 解决方法: 在用户组里新建一个用户,test002,密码,密码永不过期。 在iis站点,权限里添加该用户。“允许匿名访问”,用户选择 test002。 ok了。
611 0
advanced-ip-scanner:windows下网络扫描神器
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396661 资源地址:http://www.advanced-ip-scanner.com/cn/ 说下我的体验,扫描网络内所有设备,但凡你有网卡,就可以扫描到你,不管你开机关机。
756 0
【转】ADO.NET连接访问dbf数据库问题
from:http://space.cnblogs.com/question/7423/    悬赏园豆:20 [已解决问题] 浏览: 2067次   我发现当dbf文件的长度超过8的时候,使用OleDbCommand 查询就会出现“jet 数据库引擎找不到对象”的错误,我搜索到(http://space.cnblogs.com/question/2046/)说解决了这个问题,方法是将表的名字加个中括号。
1172 0
ADO.NET 访问 Sql Server2008(一)
           ADO.NET 是微软的 .NET  FrameWork中所包含的一组类 ,可以提供应用程序与数据库进行 通信  。         在以前的 数据库访问技术中,对于数据库的操作必须是在有连接的环境中,应用程序需要和数据源保持持续的链接  ,伸缩性和可扩展性比较差,占用资源也是比较多的 、 但是在ADO.NET中解决了这个问题  ,保证我们在  无连接的环境下也可以进行数据库的操作 。
905 0
21117
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载