2024年3月15日发(作者:)

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),--输入参数

8@pwd varchar(50),--输入参数

9@grade varchar(20),--输入参数

10@count int output --输出参数output不能少

11--sql语句

12as

13select

14go

15

16

@count=count(*) from userinfo where

username=@username and pwd=@pwd and @grade=grade

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

();

8int n = 0;//查询后返回的行数保存存储过程中的输出参数

9//创建连接对象using代码片段好处在于离开作用域后立刻从内

存中释放对象

10using

11{

();//打开数据库连接

13using

SqlCommand("proc_userinfo",con))

14{

15//什么作用不记得了只记得调用存储过程该语句不能少

(SqlCommandcmd=new

(SqlConnection con=new

SqlConnection(connstring))

string connstring =

tionStrings["connstring"].ToString

/doc/,mandType

Procedure;

17//添加存储过程输入输出参数类型及输入参数值

=

("@username", r,

50).Value=username;

("@pwd",

50).Value=pwd;

r,

r,

50).Value=grade;

("@grade",

("@count", );

ters["@username"].DbType = ;

23//指定参数类型是输入参数还是输出参数

ters["@username"].Direction

;

ters["@pwd"].DbType = ;

26//指定参数类型是输入参数还是输出参数

ters["@pwd"].Direction

;

ters["@grade"].DbType = ;

29//指定参数类型是输入参数还是输出参数

ters["@grade"].Direction

;

ters["@count"].DbType = 32;

32//指定参数类型是输入参数还是输出参数

ters["@count"].Direction

eScalar();

36//接受执行存储过程后的返回值

37n = (int)ters["@count"].Value;

38//根据返回值判断数据库中是否存在对应用户名密码及用户权

限的记录

=

; 34//执行存储过程此处类似于查询语句

=

=

=

39if (n==1)

40{

41return true;

42}

43else

44{

45return false;

46}

47}

48}

49}

至于业务逻辑层及表示层这里就不做介绍了,想必大家都知道该

怎么写了。

注:这里补充点关于清空DataGradeView中所有数据的方法

Code

1//用urcedataGradeView的数据源创

建一个DataTable对象需要强转成DataTable

2

3DataTabledt=(DataTable )urce;

4 //dataGradeView为具体的dataGradeView

5

();//删除表中的行

7

urce=dt;

9//再把dt绑定到dataGradeView上即可

10