重构机房的时候,听到了很多新的名词,其实也不是,在学习SQL的时候都接触过,但那个时候紧紧是停留在了理论上,现在通过机房进行实践。触发器,视图,存储过程等等
存储过程:将一系列相关联的SQL语句集合到一起。在程序的代码中直接执行存储过程的名字,不用每次都写这么多语句;
重构的充值表,需要同时对三张表添加数据,如果用代码编写的话,实现是没有问题的,但是如果同时操作的表更多了,怎么办。怎么提高代码的效率,提高系统的性能?这个时候用上存储过程,就初步解决了这个问题,提高了代码重用性。
1.带参数
2.不带参数
1.创建(可以用代码或者企业管理器)
自定义存储过程与系统存储过程进行区分,不要使用sp_开头。
End
DROP PROC pro_name.
机房充值表的存储过程,带有参数
CREATE PROCEDURE pro_Register -- Add the parameters for the stored procedure here @cardNo char(11),@cash numeric(10,3),@IsCheck char(10),@status char(10) , --定义所有的变量,类型要和数据库表中的类型一致; @cardDate char(10),@cardTime char(10), @addMoney numeric(19,4),@rechargeDate date,@rechargeTime time, @userID char(10),@studentNo char(11),@studentName char(10),@sex char(6), @department char(10),@grade char(10),@studentClass char(10),@note varchar(50) AS BEGIN --Begin ...End 块语句 -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here --向表中插入内容; insert into T_Student_Info (cardNo ,studentNO ,studentName ,sex ,department ,grade ,studentClass ,note ) values (@cardNo ,@studentNo ,@studentName ,@sex ,@department ,@grade ,@studentClass ,@note ) insert into T_card_Info (cardNo ,cash ,IsCheck ,status,cardDate ,cardTime,userID )values (@cardNo ,@cash ,@IsCheck ,@status ,@cardDate ,@cardTime ,@userID ) insert into T_ReCharge_Info (cardNo ,addMoney ,rechargeDate ,rechargeTime ,userID ,status ) values(@cardNo ,@addMoney ,@rechargeDate ,@rechargeTime ,@userID ,@status ) END GO
Public Function insertStudent(student As StudentEntity, card As CardEntity, recharge As RechargeEntity) As Integer Implements IDAL.IStudent.insertStudent Dim helper As New SqlHelper.SqlHelper '实例化SQLHelper类 Dim params As SqlParameter() = {New SqlParameter("@StudentNo", student.StudentNo), '存储过程中出现的参数 New SqlParameter("@cardNo", card.CardNo), New SqlParameter("@studentName", student.StudentName), New SqlParameter("@sex", student.Sex), New SqlParameter("@department", student.Department), New SqlParameter("@grade", student.Grade), New SqlParameter("@StudentClass", student.StudentClass), New SqlParameter("@note", student.Note), New SqlParameter("@cash", card.Cash), New SqlParameter("@Ischeck", card.IsCheck), New SqlParameter("@status", card.Status), New SqlParameter("@cardDate", card.CardDate), New SqlParameter("@cardTime", card.CardTime), New SqlParameter("@addMoney", recharge.AddMoney), New SqlParameter("@rechargedate", recharge.RechargeDate), New SqlParameter("@rechargeTime", recharge.RechargeTime), New SqlParameter("@userID", Entity.UserEntity.UserHead) } Dim result As Integer '定义一个整形变量,存放返回值; '执行helper对象的ExecuteNonQuery带参数的方法,参数是存储过程名,存储过程类型,还有参数; result = helper.ExecuteNonQuery("pro_register", CommandType.StoredProcedure, params) Return result End Function
存储过程的使用,不单单减少了代码,而且提高了系统的性能和效率,机房重构,更多的还是在于接触很多以前没有接触的东西,在实践中发现它们的优点,善于使用,善于发现更加的解决方案。