c#重构之存储过程

前言

  进行重构的时候,可能实现一个功能需要走好几遍七层,以我的为例,比如注册:注册之前先判断卡号是否存在,注册后需要往student表和user表中添加记录,注册的金额要同步到RechargeCard表中,这样的话需要走4遍7层,会有很多相似的代码,为了解决代码冗余的问题,故使用了存储过程。

过程详解

 是什么

  存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

 怎么用

  1.打开SQLServer→具体的数据库→可编程性→存储过程→右击新建存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<郝平平>
-- Create date: <2018-8-14>
-- Description:	<注册时和数据库的交互>
-- =============================================
ALTER PROCEDURE [dbo].[Proc_Register]

	-- Add the parameters for the stored procedure here 所需要的参数
	@cardNo varchar(20),
	@studentName varchar(20),
	@sex char(10),
	@department varchar(20),
	@grade varchar(50),
	@specialty varchar(50),
	@balance numeric(10,2),
	@UserID varchar(20),
	@PWD varchar(20),
	@RechargeCash numeric(10,2)
	
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- 添加记录给Student表
    insert into Student(cardNo,studentName,sex,department,grade,specialty,balance,UserID,state,Ischeck)values(@cardNo,@studentName,@sex,@department,@grade,@specialty,@balance,@UserID,'True','False')
    
    --添加记录给User_Info表
    insert into User_Info(UserID,PWD,Level,UserName,state)values(@cardNo,@PWD,'学生',@studentName,'True')
    
    --添加记录给ReCharge表
    insert into ReCharge(cardNo,RechargeCash,Balance,UseID,Ischeck)values(@cardNo,@RechargeCash,@RechargeCash,@UserID,'False')
    
END

  存储过程写完之后,一定要执行一下,否则在D层使用的时候会找不到相应的存储过程。

  2.在对应的D层使用对应的存储过程:

public class ReigsterDAL : IDAL.IRegister
    {
        public int RegisterCard(Entity.UserInfo userInfo)
        {
            SQLHelper SQLHelper = new SQLHelper();
            
			//所用到的参数,与存储过程相对应
            SqlParameter[] sqlParams = {new SqlParameter("@cardNo",userInfo.cardno),
                                        new SqlParameter("@studentName",userInfo.UserName),
                                        new SqlParameter("@sex",userInfo.Sex),
                                        new SqlParameter("@department",userInfo.Department),
                                        new SqlParameter("@grade",userInfo.Grade),
                                        new SqlParameter("@specialty",userInfo.Specialty),
                                        new SqlParameter("@balance",userInfo.Balance),
                                        new SqlParameter("@UserID",userInfo.UserID),
                                        new SqlParameter("@PWD",userInfo.Password),
                                        new SqlParameter("@RechargeCash",userInfo.Rechargecash)};

            string sql = "Proc_Register";     //存储过程名称
            int res = SQLHelper.ExecuteNonQuery(sql, sqlParams, CommandType.StoredProcedure);  //注意这里也是存储过程
            return res;
        }
    }

  3.这样一来存储过程就使用完了,走一遍7层可以实现走三遍7层的功能,是不是很完美呢?

 优缺点

  优点:重复使用,减少代码量;
  缺点:如果数据库损坏,程序将无法运行;不可移植

总结

  总之,小编很看好存储过程哦,因为目前我做的系统不存在移植的问题,使用存储过程可以提高我的开发效率,何乐而不为呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值