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 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的值就会是返回的值。
 	好了就简单的介绍到这里,希望大家能够踊跃的评论,大家一起学习
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个小虾米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值