作者:杨斜2602934873 | 来源:互联网 | 2023-05-18 21:55
我想对于研发的人员来说,存储过程大家肯定耳熟能详,在这里我就把我简单使用的体会描述下:存储过程概念:存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据
我想对于研发的人员来说,存储过程大家肯定耳熟能详,在这里我就把我简单使用的体会描述下:
存储过程概念:存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
存储过程的优点:
1. 如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。
2.存储过程可被作为一种安全机制来充分利用,可以很好的防止sql语句的注入。
创建存储过程:
1. 创建语法:
create proc| procedure 存储过程名称
(@id int --默认是输出参数即指的是当做条件的参数,@name varchar(20)output --输出参即指的是输出的参数结果)
with encryption --加密操作,这样就不会显示存储过程的详细信息
as
begin
T-sql语句
end
2.创建存储过程时,首先要检查数据库中是否已经存在了同名的存储过程,这里有两种方式来实现此功能:
1.if (object_id('存储过程名','P')isnotnull)
drop proc 存储过程名
2.if (exists (select * from sys.objects where name = '存储过程名'))
drop proc 存储过程名 --其中sys.objects是存储所有对象的表,其中包括存储过程、触发器等。这里的sys.objects可以换成sys.procedures 这个是存储所有存储过程的表
3.实例
1. 无参数的存储过程
create proc proc_users
as
select * from users
2. 带参数的存储过程 (拿登陆的存储过程来说)
if (object_id('proc_usersEncryotion', 'P') is not null)
drop proc proc_usersEncryotion
create proc proc_usersEncryotion
(@username varchar(100), @upwd varchar(100) )
with encryption-- 加密,加密之后自己也看不见存储过程的详细内容!
as
begin
select * from Users where UserName=@username and Upwd=@upwd;
end
go
3.带输入输出参数的存储过程:
ALTER proc [dbo].[proc_userOUTPUT]
(@id int ,@name varchar(20) output)
as
begin
select @name=UserName from Users where UserId=@id
end
在程序中调用:
public string GetName(int id)
{
string name = "";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "proc_userOUTPUT";
if (con.State != ConnectionState.Open)
con.Open();
cmd.COnnection= con;
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] param = { new SqlParameter("@id", id), new SqlParameter("@name", SqlDbType.VarChar,20) };
foreach (var para in param)
{
cmd.Parameters.Add(para);
}
cmd.Parameters["@name"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
name = cmd.Parameters["@name"].Value.ToString();
return name;
}
4. 带输入参数以及返回值的存储过程:
ALTER proc [dbo].[proc_UserLogin]
( @name varchar(20),@upwd varchar(20))
as
declare @value int
begin
select @value=COUNT(*) from Users where UserName=@name and Upwd=@upwd
return @value;
end
这样就必须接return返回的值,程序中的操作如下:
public int usersLogin( string username,string upwd)
{
int i = 0;
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "proc_UserLogin";
if (con.State != ConnectionState.Open)
con.Open();
cmd.COnnection= con;
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] param = { new SqlParameter("@name", username), new SqlParameter("@upwd", upwd), new SqlParameter("@value", SqlDbType.Int) };
//SqlParameter papa = new SqlParameter("@name", SqlDbType.VarChar, 20);
//cmd.Parameters.Add(papa);
//cmd.Parameters["@name"].Value = username;
foreach (var para in param)
{
cmd.Parameters.Add(para);
}
cmd.Parameters["@value"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
i = Convert.ToInt16(cmd.Parameters["@value"].Value.ToString());
return i;
}
这样i的值就会是返回的值。
好了就简单的介绍到这里,希望大家能够踊跃的评论,大家一起学习