黑马程序员--存储过程

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

一、存储过程的概念

存储过程是在数据库管理系统中保存的、预先编译的并能实现某种功能的SQL程序,它是数据库应用中运用比较广泛的一种数据对象

1、为什么需要存储过程

1> 防止SQL注入式攻击

2> 应用程序执行的过程是不安全的,主要问题:

>数据不安全

>每次提交SQL代码都要经语法编译后再执行,影响应用程序的运行性能

>网络流量大

2、什么是存储过程

1> 概述:

>存储过程(Procedure)类似于C#中的方法,它是SQL语句和控制语句的预编译集合。存储过程保存在数据库里,可由应用程序通过一个调用(CommandType.StoredProcedure

执行,而且允许用户声明变量,逻辑控制语句以及其他强大的编程功能

>存储过程返回单个或多个结果集以及返回值

2> 使用存储过程的优点

>模块化程序设计

>执行速度快,效率高

>减少网络流量

>具有良好的安全性

二、系统存储过程

1、常用的系统存储过程

>exec sp_databases                                      --当前系统中的数据库

>exec sp_renamedb 'MySchool','MySh'       --改变数据库名称(单用户访问)

use MySchool

        go

       >exec sp_tables                                            --当前数据库可以查询对象的列表

>exec sp_columns Student                           --查看表student中列的信息

>exec sp_help student                                  --查看表student的所有信息

>exec sp_helpconstraint student                  --查看表student的约束

>exec sp_helptext 'view_Student_Result'    --查看视图的语句文本

>exec sp_stored_procedures                        --返回当前数据库中的存储过程列表

2、常用的扩展存储过程

缺省?

三、用户定义的存储过程

1、创建带参数的存储过程

1> 语法

>创建存储过程

create proc 存储过程名

@参数1数据类型 [=默认值][output]

                     .......,

                     @参数n数据类型 [=默认值][output]

              as

                     SQL语句

>删除存储过程

drop proc 存储过程名

>执行存储过程

exec 存储过程名参数值1.....,参数n

2> 检测存储过程是否存在

if exists(select * from sysobjects where name=存储过程名)

drop proc 存储过程名

go

3> 实例:

create proc sys_login

              @loginId varchar(20),

              @loginPwd varchar(20)

       as

              select loginId,LoginPwd from Admin

              where LoginId=@loginId and LoginPwd=@loginPwd

4> 应用程序调用存储过程

SqlConnection conn = new SqlConnection("server=.;database=MySchool;integrated security=SSPI");

            //放入存储过程名

SqlCommand cmd = new SqlCommand("sys_login",conn);

            //存储过程必须把CommandType设置为存储过程,不能是默认Text类型

cmd.CommandType = CommandType.StoredProcedure;

            //对应每个参数进行赋值

cmd.Parameters.AddRange(new SqlParameter[] {

                new SqlParameter("@loginId",textBox1.Text),

                new SqlParameter("@loginPwd",textBox2.Text)});

            conn.Open();

            SqlDataReader read = cmd.ExecuteReader();

            bool hasrow = false;

            if (read.HasRows)

                hasrow = true;

            conn.Close();

            if (hasrow)

                MessageBox.Show("登陆成功!");

else

                MessageBox.Show("登陆失败!");

2、创建带输出参数的存储过程

1> 如果存储过程的参数后面有“output”关键字,则表示此参数为输出参数

2> 实例:

create proc sys_login

              @num int output,       --输出参数

@loginId varchar(20),

              @loginPwd varchar(20)

       as

              select loginId,LoginPwd from Admin

              select @num=count(*) from Admin

四、处理异常信息

1raiserror语句

>对正常的程序逻辑强制生成错误,并停止过程的执行,类似于.netthrow异常

>抛出异常是传递信息的一种方式

>SQL

create proc getAge

                     @age int = 15

              as

              begin

                     if @age<18

                            raiserror('未成年不能购买寂寞,除非被潜?',6,1)

              end

       > .net

if(t!="w")

              {

                     throw new Exception("错误啦!");

              }

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值