【C#】机房重构-下机+存储过程

前言

       在做机房的时候一定要先考虑好,该功能要和数据库中那个表打交道,把各种因素都考虑进去,可是每次都考虑的不是很全怎么办呢? 那没关系,只要自己做了思考,以后修改起来就会很方便!先看一下下机的流程图吧!
【C#】机房重构-下机+存储过程_第1张图片

思考

经过自己整理一遍思路,发现要实现这个功能会查到很多表,重复的很多,这样会使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层的代码量
  • 执行的速度快

不足

  • 可移植性查
  • 代码可读性差,难维护
  • 如果数据库损坏,将是一个巨大的损失

总结

       既然学习了这么多,就要学以致用,理论达到了,就要着手实践,要不永远都是假把式。

你可能感兴趣的:(【C#】)