关于存储过程的介绍大家想必也不陌生了吧。大家可以参考《浅谈存储过程》一文,这里不做介绍。
今天要介绍的是在C#里如何调用带输入输出参数的存储过程。譬如实现简单的登陆功能,根据用户输入的用户名、用户密码及用户权限实现登陆。这里充当输入参数的有:用户名、用户密码、登陆权限。充当输出参数的就是在数据库里面根据输入参数的信息查询数据库中是否有记录。具体来说就是记录的行数。
数据库中的存储过程构建代码:
1
use Hotel --数据库名2
if exists(select * from sysobjects where name='proc_userinfo')--判断是否存在存储过程3
drop proc proc_userinfo --若存在删除此存储过程4
go5
--创建存储过程6
create proc proc_userinfo7
@username varchar(50),--输入参数8
@pwd varchar(50),--输入参数9
@grade varchar(20),--输入参数10
@count int output --输出参数output不能少11
--sql语句12
as13
select @count=count(*) from userinfo where username=@username and pwd=@pwd and @grade=grade14
go15

16

17
执行存储过程18
declare @n int19
exec proc_userinfo admin,123,管理员,@n output 20
--output不能少21
print @n22
go
数据访问层代码
1
//调用存储过程执行类似于 2
//select count(*) from userinfo where username=username and pwd=pwd and grade=grade3
//接受三个参数分别用来表示用户名、用户密码、用户权限4
public bool GetUserinfo(string username,string pwd,string grade)5

{6
//获取连接字符串7
private string connstring = ConfigurationManager.ConnectionStrings["connstring"].ToString();8
int n = 0;//查询后返回的行数保存存储过程中的输出参数9
//创建连接对象 using代码片段好处在于离开作用域后立刻从内存中释放对象10
using (SqlConnection con=new SqlConnection(connstring))11

{12
con.Open();//打开数据库连接13
using (SqlCommand cmd=new SqlCommand("proc_userinfo",con))14

{15
//什么作用不记得了只记得调用存储过程该语句不能少16
cmd.CommandType = CommandType.StoredProcedure;17
//添加存储过程输入输出参数类型及输入参数值18
cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value=username;19
cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50).Value=pwd;20
cmd.Parameters.Add("@grade", SqlDbType.VarChar, 50).Value=grade;21
cmd.Parameters.Add("@count", SqlDbType.Int);22
cmd.Parameters["@username"].DbType = DbType.String;23
//指定参数类型是输入参数还是输出参数24
cmd.Parameters["@username"].Direction = ParameterDirection.Input;25
cmd.Parameters["@pwd"].DbType = DbType.String;26
//指定参数类型是输入参数还是输出参数27
cmd.Parameters["@pwd"].Direction = ParameterDirection.Input;28
cmd.Parameters["@grade"].DbType = DbType.String;29
//指定参数类型是输入参数还是输出参数30
cmd.Parameters["@grade"].Direction = ParameterDirection.Input;31
cmd.Parameters["@count"].DbType = DbType.Int32;32
//指定参数类型是输入参数还是输出参数33
cmd.Parameters["@count"].Direction = ParameterDirection.Output;34
//执行存储过程 此处类似于查询语句35
cmd.ExecuteScalar();36
//接受执行存储过程后的返回值37
n = (int)cmd.Parameters["@count"].Value;38
//根据返回值判断数据库中是否存在对应用户名密码及用户权限的记录39
if (n==1)40

{41
return true;42
}43
else44

{45
return false;46
}47
}48
}49
}
至于业务逻辑层及表示层这里就不做介绍了,想必大家都知道该怎么写了。
注:这里补充点关于清空DataGradeView中所有数据的方法
1
//用dataGradeView.DataSource dataGradeView的数据源创建一个DataTable 对象 需要强转成DataTable 2

3
DataTable dt=(DataTable )dataGradeView.DataSource; 4
//dataGradeView为具体的dataGradeView5

6
dt.Rows.Clean(); //删除表中的行7

8
dataGradeView.DataSource=dt; 9
//再把dt绑定到dataGradeView上即可10

浙公网安备 33010602011771号