C#调用sql存储过程

版权声明:本文为Banana原创文章,未经Banana允许不得转载。评论请留下你认真观看后的想法或者意见,非常感谢! https://blog.csdn.net/qq1515312832/article/details/79333924

使用存储过程的优点和缺点

优点

1.降低网络传输数据量:通过存储过程的名称和参数传递即可调用执行,不用传输sql语句。

2.执行效率高:sqlserver会事先将存储过程编译成可执行的二进制代码,运行存储过程时,无需再次编译。

3.封装性:也可叫模块式编程,将实现某种功能的多条sql封装到一个对象中,可多次重复调用,可移植性强。

4.安全:可针对不同的权限的用户使用不同的存储过程。

缺点

1.调试麻烦,但是用 PL/SQL Developer  调试很方便!弥补这个缺点。

2.移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

3.重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

4.如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

创建

USE [newcharge_sys]
GO
/****** Object:  StoredProcedure [dbo].[proc_OffLine]    Script Date: 2018/2/26 8:17:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[proc_OffLine]
	@CardNo char(10),
	@StuNo char(11),
	@Date date,
	@Type char(10),
	@StuName char(10),
	@Sex char(10),
	@Department char(10),
	@OnDate date,
	@OnTime time(0),
	@Computer char(10),
	@Cash numeric(10, 3),
	@Offdate date,
	@Offtime time(0),
	@ConsumeTime char(10),
	@Consume numeric(18,1),
	@Status char(10)
	
as
	delete from OnLine_Info where CardNo = @CardNo
	update Linelog_Info 
	set
		Offdate = @Offdate,
		Offtime = @Offtime,
		ConsumeTime = @ConsumeTime,
		Consume = @Consume,
		Cash = @Cash,
		Status = @Status
	where
		CardNo = @CardNo and Ondate = @OnDate and Ontime = @OnTime
	update Card_Info set Cash = @Cash where CardNo = @CardNo

调用

            SqlParameter[] sqlparas = {//将存储过程中的名字与程序中的名字对应起来
                    new SqlParameter("@CardNo",line[0].CardNo),
                    new SqlParameter("@StuNo",line[0].StuNo),
                    new SqlParameter("@Date",line[0].Date),
                    new SqlParameter("@Type",line[0].CardType),
                    new SqlParameter("@StuName",line[0].StuName),
                    new SqlParameter("@Sex",line[0].Sex),
                    new SqlParameter("@Department",line[0].Department),
                    new SqlParameter("@OnDate",line[0].OnDate),
                    new SqlParameter("@OnTime",line[0].OnTime),
                    new SqlParameter("@Cash",line[0].Cash),
                    new SqlParameter("@Computer",line[0].Computer),
                    new SqlParameter("@Offdate",line[0].Offdate),
                    new SqlParameter("@Offtime",line[0].Offtime),
                    new SqlParameter("@ConsumeTime",line[0].ConsumeTime),
                    new SqlParameter("@Consume",line[0].Consume),
                    new SqlParameter("@Status",line[0].Status)
            };
            string procname = "proc_OffLine";
            sqlhelper.ExecuteNonQuery(procname, sqlparas, CommandType.StoredProcedure);

猜你喜欢

转载自blog.csdn.net/qq1515312832/article/details/79333924