微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver存储过程创建以及应用

我想对于研发的人员来说,存储过程大家肯定耳熟能详,在这里我就把我简单使用的体会描述下:

        存储过程概念:存储过程Procedure是一组为了完成特定功能sql语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。

    存储过程的优点:

      1. 如果某一操作包含大量的T-sql语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能

  2.存储过程可被作为一种安全机制来充分利用,可以很好的防止sql语句的注入。

       创建存储过程:

      1. 创建语法:

create proc| procedure 存储过程名称

@id int --认是输出参数即指的是当做条件的参数,@name varchar20output --输出参即指的是输出的参数结果

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-- 加密,加密之后自己也看不见存储过程的详细内容
	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",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的值就会是返回的值。
 好了就简单的介绍到这里,希望大家能够踊跃的评论,大家一起学习

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐