前言
在做机房的时候一定要先考虑好,该功能要和数据库中那个表打交道,把各种因素都考虑进去,可是每次都考虑的不是很全怎么办呢? 那没关系,只要自己做了思考,以后修改起来就会很方便!先看一下下机的流程图吧!
思考
经过自己整理一遍思路,发现要实现这个功能会查到很多表,重复的很多,这样会使D层的代码增加很多,于是就有了存储过程!
官话:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
个人理解:是一个存有很多SQL语句的容器,如果需要使用的话,直接调用,如果存储过程中有参数,一定要先赋值。可以一次完成多种操作!
实战:删除上机表中的用户,向下机表中插入该用户,更新用户表中的余额。 这三次操作可以放在一起执行吧!那就先创建一个存储过程吧!
-- =============================================
-- Author: <闫伟强>
-- Create date: <2018/09/25>
-- Description: <下机>
-- =============================================
ALTER PROCEDURE [dbo].[proc_Query]
-- Add the parameters for the stored procedure here
@DbName nvarchar(50),
@comboZD1 nvarchar(20),
@comboZD2 nvarchar(20),
@comboZD3 nvarchar(20),
@comboCZ1 nvarchar(10),
@comboCZ2 nvarchar(10),
@comboCZ3 nvarchar(10),
@text1 nvarchar(10),
@text2 nvarchar(10),
@text3 nvarchar(10),
@comboGX1 nvarchar(5),
@comboGX2 nvarchar(5)
AS
DECLARE @txtSQL varchar(500)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
set @txtSQL='select * from' +@DbName+'where'+char(32)+@comboZD1+@comboCZ1+char(39)+@text1+char(39)
if(@comboGX1!=null)
begin
set @txtSQL=@txtSQL+char(32)+@comboGX1+char(32)+@comboZD2+@comboCZ2+char(39)+@text2+char(39)
if(@comboGX2!=null)
begin
set @txtSQL=@txtSQL+char(32)+@comboGX2+char(32)+@comboZD3+@comboCZ3+char(39)+@text3+char(39)
end
end
execute(@txtSQL)
END
创建完成之后需要的时候在D层使用,代码如下:
public DataTable CunChu(LineInfo Line,decimal money)
{
sqlHelper sqlhelper = new sqlHelper();
SqlParameter[] sqlparams = { new SqlParameter("@ID", Line.ID),
new SqlParameter("@Name",Line.Name),
new SqlParameter("@Monetary",money),
new SqlParameter("@OnDateTime",Line.OnDateTime),
new SqlParameter("@OffDateTime",Line.OffDateTime),
new SqlParameter("@Type",Line.Type),
new SqlParameter("@Computer",Line.Computer)};
string procname = "Pro_Offline";
DataTable table = sqlhelper.ExecuteQuery(procname, sqlparams, CommandType.StoredProcedure);
return table;
}
优缺点
存储过程能让你更方便,那它就有它的弊端优点:
- 一次性编译
- 可以重复使用
- 模块化
- 减少D层的代码量
- 执行的速度快
不足
- 可移植性查
- 代码可读性差,难维护
- 如果数据库损坏,将是一个巨大的损失
总结
既然学习了这么多,就要学以致用,理论达到了,就要着手实践,要不永远都是假把式。