数据库--存储过程
我们知道,在对数据库进行操作的时候,我们可以使用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,所以记得把这个地方改一下就行了,其他的参数该怎么传,还怎么传,但是要保证参数的名称要保持一致...