C#中调用输入输出参数的存储过程
C#中调用输入输出参数的存储过程
关于存储过程的介绍大家想必也不陌生了吧。大家可以参考《浅谈存储过程》一文,这里不做介绍。
今天要介绍的是在C#里如何调用带输入输出参数的存储过程。譬如实现简单的登陆功能,根据用户输入的用户名、用户密码及用户权限实现登陆。这里充当输入参数的有:用户名、用户密码、登陆权限。充当输出参数的就是在数据库里面根据输入参数的信息查询数据库中是否有记录。具体来说就是记录的行数。
数据库中的存储过程构建代码:
Code
1use Hotel --数据库名
2if exists(select * from sysobjects where name='proc_userinfo')--判断是否存在存储过程
3drop procproc_userinfo --若存在删除此存储过程
4go
5--创建存储过程
6create procproc_userinfo
7@username varchar(50),--输入参数
drop table if exists admin8@pwd varchar(50),--输入参数
9@grade varchar(20),--输入参数
10@count int output --输出参数output不能少
11--sql语句
12as
13select @count=count(*) from userinfo where username=@username and pwd=@pwd and @grade=grade
14go
15
16
17执行存储过程
18declare @n int
19exec proc_userinfo admin,123,管理员,@n output
20--output不能少
21print @n
22go
数据访问层代码
Code
1//调用存储过程执行类似于
2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade
3//接受三个参数分别用来表示用户名、用户密码、用户权限
4public boolGetUserinfo(string username,stringpwd,string grade)
5{
6//获取连接字符串
7private string connstring = ConfigurationManager.ConnectionStrings["connstring"].ToString();
8int n = 0;//查询后返回的行数保存存储过程中的输出参数
9//创建连接对象using代码片段好处在于离开作用域后立刻从内存中释放对象
10using (SqlConnection con=new SqlConnection(connstring))
11{
12con.Open();//打开数据库连接
13using (SqlCommandcmd=new SqlCommand("proc_userinfo",con))
14{
15//什么作用不记得了只记得调用存储过程该语句不能少
www.doczj/doc/cb9389449.html,mandType = CommandType.StoredProcedure;
17//添加存储过程输入输出参数类型及输入参数值
18cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value=username;
19cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50).Value=pwd; 20cmd.Parameters.Add("@grade", SqlDbType.VarChar, 50).Value=grade; 21cmd.Parameters.Add("@count", SqlDbType.Int);
22cmd.Parameters["@username"].DbType = DbType.String;
23//指定参数类型是输入参数还是输出参数
24cmd.Parameters["@username"].Direction = ParameterDirection.Input;
25cmd.Parameters["@pwd"].DbType = DbType.String;
26//指定参数类型是输入参数还是输出参数
27cmd.Parameters["@pwd"].Direction = ParameterDirection.Input;
28cmd.Parameters["@grade"].DbType = DbType.String;
29//指定参数类型是输入参数还是输出参数
30cmd.Parameters["@grade"].Direction = ParameterDirection.Input;
31cmd.Parameters["@count"].DbType = DbType.Int32;
32//指定参数类型是输入参数还是输出参数
33cmd.Parameters["@count"].Direction = ParameterDirection.Output; 34//执行存储过程此处类似于查询语句
35cmd.ExecuteScalar();
36//接受执行存储过程后的返回值
37n = (int)cmd.Parameters["@count"].Value;
38//根据返回值判断数据库中是否存在对应用户名密码及用户权限的记录
39if (n==1)
40{
41return true;
42}
43else
44{
45return false;
46}
47}
48}
49}
至于业务逻辑层及表示层这里就不做介绍了,想必大家都知道该怎么写了。
注:这里补充点关于清空DataGradeView中所有数据的方法
Code
1//用dataGradeView.DataSourcedataGradeView的数据源创建一个DataTable对象需要强转成DataTable
2
3DataTabledt=(DataTable )dataGradeView.DataSource;
4 //dataGradeView为具体的dataGradeView
5
6dt.Rows.Clean();//删除表中的行
7
8dataGradeView.DataSource=dt;
9//再把dt绑定到dataGradeView上即可
10

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。