在上一篇的文章中,讲述了一下存储过程是什么,今天这篇文章主要就是自己在实战过程中遇到的问题和解决方法以及是怎么进行实战的。
首先上一个链接:存储过程,让小伙伴们先了解一下什么是存储过程。
接下来就是看一下存储过程在SQL Server数据库中的代码模板:
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date:
-- Description:
-- =============================================
CREATE PROCEDURE
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> = ,
<@Param2, sysname, @p2> =
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO
那么如何创建存储过程呢?
步骤:打开需要创建存储过程的数据库(CRRData)
可编程性
存储过程
左击-存储过程(2014版本的,其他版本为新建存储过程)
如图:
这样就会出现上面所述的存储过程代码模板。
接下来,就是我在进行注册时,所创建的存储过程代码:
USE [CRRData]
GO
/****** Object: StoredProcedure [dbo].[PROC_Register] Script Date: 2017-08-26 16:15:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date: <2017-8-20>
-- Description: <注册>
-- =============================================
CREATE PROCEDURE [dbo].[PROC_Register]
-- Add the parameters for the stored procedure here
@cardno int,
@cash decimal(18,2),
@userid int,
@status char(50),
@ischeck char(10),
@date date,
@time time(7),
@studentno int,
@studentname char(50),
@sex char(10),
@department char(10),
@grade char(10),
@classes char(10),
@explain char(50),
@type char(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
--添加SQL语句
select * from Card_Info where cardno=@cardno
if @@ROWCOUNT=0
-- Insert statements for procedure here
--在表card_Info中添加信息
insert into Card_Info(cardno,cash,status,userid,ischeck,date,time) values (@cardno,@cash,@status,@userid,@ischeck,@date,@time)
--在表Student_Info中添加信息
insert into Student_Info(cardno,studentname,studentno,department,grade,sex,classes,explain,type) values (@cardno,@studentname,@studentno,@department,@grade,@sex,@classes,@explain,@type)
--在表Recharge_Info中添加信息
insert into Recharge_Info(cardno,studentno,addmoney,date,time,userid,status) values (@cardno,@studentno,@cash,@date,@time,@userid,@status)
END
保存时或者说点击!执行时,会出现一个保存文件的对话框,这时候就要注意你要保存的路径了,一般情况下默认的保存路径会是在你想要创建的数据库下,但是还有不一般的情况,那就是当你保存在默认的保存路径时,在自己想要创建的数据库下反而刷新不出来,这时你会惊奇的发现你的存储过程在其他的数据库中,这时就要注意的你的文件保存的路径问题了。
那么在D层中是如何使用呢?
string sql = "PROC_Register"; //存储过程名称
int registercard = sqlhelper.ExecuteNonQuery(sql, CommandType.StoredProcedure, sqlParams);
return registercard;
好了,就总结到这里。对于一个新的事物,不仅要了解到是什么,还要总结如何做。