数据库存储过程

我们知道,在对数据库进行操作的时候,我们可以使用sql语句,也可以使用存储过程,那么使用存储过程有什么好处呢,首先它是预编译的语句,所以效率很高,其次就是很安全,用sql语句的时候有可能会被进行sql注入,存储过程完全被隐藏的,所以会避免,很安全,一般的情况下,一些小项目,比如web开发的时候,小企业站可以使用sql语句,大型的行业网站从安全和性能可以使用存储过程,下面就来存储过程的写法:

其实这些东西都是死的,多写几遍就ok了

A、不带参数的存储过程

create proc stuInfo
as
select * from student
go

B、带参数的存储过程

create proc stuBysex
@sex varchar(50)
as
select * from student where sex=@sex
go

C、带输出参数的存储过程

create proc stuOutNamebyid
@outName varchar(50) output
as
select @outName=name from student where id=2

go

declare @outName varchar(50)
exec stuOutNamebyid @outName output
print @outName

下面是增删改的存储过程

增加

create proc insertStu
@name varchar(50),
@sex varchar(50),
@age int,
@address varchar(50)
as
insert into Student(name,sex,age,address)values(@name,@sex,@age,@address)
go

exec insertStu 'shuang','女',34,'aaa'

删除

create proc delStu
@id int
as
delete from Student where id=@Id
go

exec delStu '5'

修改
create proc UpdateStu
@id int
as
update Student set name='aa' where id=@id
go

exec UpdateStu '4'

在创建存储过程的时候可以为参数赋默认值

alter proc proDemo
@b datetime='2011-1-1',
@c datetime='2011-5-30'
as
select top 20 * from  u_userinfo where regdate between @b and @c
go

但是执行的时候,如果没有参数,可以不用写...

exec proDemo

上面就是我们创建存储过程的写法,那么在程序中怎么使用,其实在不同的语言中各有个的调用方法,现在看看在.Net中怎么使用,看下面的例子

    public static IList<FileInfor> GetFile(int id)
    {
       using(OleDbConnection connecting=new OleDbConnection(Connstr))
       {
           OleDbCommand cmd = new OleDbCommand();
           cmd.Connection = connecting;
           cmd.CommandText="存储过程名称";
           cmd.CommandType = CommandType.StoredProcedure;
           cmd.Parameters.Add(new OleDbParameter("@id",id));
           connecting.Open();
           using(OleDbDataReader reader=c)
           {
           .......
           }
       }
    }

最重要的是  cmd.CommandType = CommandType.StoredProcedure;默认的情况下是调用sql语句的时候cmd.CommandType = CommandType.Text,所以记得把这个地方改一下就行了,其他的参数该怎么传,还怎么传,但是要保证参数的名称要保持一致...

多思考,多创新,才是正道!
原文地址:https://www.cnblogs.com/shuang121/p/1966341.html