存储过程的使用

在师哥师姐验收的时候,就听过存储过程和触发器了。在个人重构好多地方也用到了存储过程。存储过程和触发器是两个重要的数据库对象,触发器是一种特殊类型的存储过程,在这里主要是介绍一下存储过程的应用。

什么是存储过程?

存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库
中。存储过程可包含程序流、逻辑及对数据库的查询。他们可以接受参数、输出参数、返回单个或多个结果集或返回值。
个人理解:存储过程就是可以对多个表同时进行操作,数据库的增删改可以并发进行。以注册为例,我们在插入学生信息的同时,也要在卡号和充值表中进行数据的更新。在充值的时候,我们可以完成对卡表钱总额的更新。

存储过程的优点

确保了数据放访问和修改的一致性,存储过程可以封装业务功能。
存储过程提供了安全机制。即使没有访问存储过程引用的表或者视图的权限的用户也可以被授权执行该存储过程。
存储过程可以减少网络通信流量,允许模块化程序设计,改进应用程序的可维护性。

存储过程的创建

以注册为例对存储过程进行讲解
在数据库中新建查询

USE 自己的数据库名称
Go
CREATE PROCEDURE pro_Register(存储过程的名称)    
/***学生表、注册表、充值表所需要的所有参数****/
@cardNo  varchar(14),@userNo varchar(14),
@money   smallmoney,@type  varchar(8),
@EnrollDate  date,@EnrollTime time(0),
@status varchar(8),@userNo varchar(14),
@studentNo varchar(14),@cardNo varchar(14),
@stuName varchar(8),@stuSex varchar(2),
@stuInstitution varchar(14),@stuDeparment varchar(14),
@stuGrade  varchar(14),@stuClass varchar(14),
@type  varchar(8),@Date date,
@Time time(0),@status varchar(8),
@explain  varchar(8),@addMoney  smallmoney
as 
begin
    SET NOCOUNT ON; 
  Insert into T_StudentInfo(studentNo,cardNo,stuName,stuSex,stuInstitution,stuDeparment,stuGrade,stuClass) values(@studentNo,@cardNo,@stuName,@stuSex,@stuInstitution,@stuDeparment,@stuGrade,@stuClass)
  Insert into T_EnrollCard(cardNo,userNo,addMoney,type,Date,Time,status,explain) values(@cardNo,@userNo,@Addmoney,@type,@Date,@Time,@status,@explain)
  Insert into T_ChargeMoney(cardNo,userNo,addMoney,Date,Time,status)values(@cardNo,@userNo,@addMoney,@Date,@Time,@status)
end

在D层代码

public bool enroll(Register register, cardInfo card)
        {

              bool flag = false;//学号
              SqlParameter[] pars = new SqlParameter[]
                 {
                     new SqlParameter("@studentNo",register.StuNo),
                     new SqlParameter("@cardNo",register.CardNo),
                     new SqlParameter ("@stuName",register.StuName),
                     new SqlParameter("@stuSex",register.StuSex),
                     new SqlParameter("@stuInstitution",register.stuInstitution),
                     new SqlParameter("@stuDeparment",register.StuDeparment),
                     new SqlParameter("@stuGrade",register.stuGrade),
                     new SqlParameter ("@stuClass",register.stuClass),
                     new SqlParameter("@Addmoney",card.stuMoney),
                     new SqlParameter ("@type",card.stuType),
                     new SqlParameter("@Date",Convert.ToDateTime(card.cardDate)),
                     new SqlParameter("@Time",Convert.ToDateTime(card.cardDate)),
                     new SqlParameter("@status",card.stuStatus),
                     new SqlParameter("@explain",card.stuExplain),
                     new SqlParameter ("@userNo",card.cardenroll )

                };
            string sql = "Pro_AddInfo";
            int rows = SQLHelper.ExecuteNonQuery(sql, pars,CommandType.StoredProcedure);     //executeNonquery执行查询(用于不返回行的查询以查看该查询返回的行)
                 if (rows>0)
                  {
                    flag =true;

                 }
            return flag;

在D层中写入的参数是三个表中所有的参数,存储过程的应用,使我们不必在D层写三个Insert 语句,只需要sql=“存储过程名称”就直接在数据库总进行了Insert语句的执行,在这里值得注意的是,之前我们写的是CommandType.Text,现在要写CommandType.StoredProcedure。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值