sqlserver存储过程创建以及应用
我想对于研发的人员来说,存储过程大家肯定耳熟能详,在这里我就把我简单使用的体会描述下: ? ? ? ? 存储过程概念:存储过程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 notnull) proc proc_usersEncryotion create proc proc_usersEncryotion
(@username varchar(100),@upwd varchar(100) )
with encryption-- 加密,加密之后自己也看不见存储过程的详细内容!
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",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的值就会是返回的值。
好了就简单的介绍到这里,希望大家能够踊跃的评论,大家一起学习 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |