带输出参数的存储过程

17 篇文章 0 订阅
3 篇文章 0 订阅

先看下面的一小段存储过程:

ALTER procedure [dbo].[StuInfo_GetStuInfo_CardID]

@CardID varchar(20) , @Available varchar(20),@intCountCardID intoutput

as

begin

select @intCountCardID= count(CardID) from StudentInfo where CardID=@CardID andAvailable=@Available

end
起初我在数据访问层的方法中用的Datareader来获取存储过程中的输出参数,因为对datareader不熟悉,调试了很长时间,程序本身并不抛出异常,但是无法获取数据表中的数据,上网查了不少资料,最开始以为是datareader的连接关闭问题,修改后依然不行;继续查资料,看到有人说datareader读取的数据默认位置是第一条记录之前,然后通过reader方法读取数据,但是依然没有读到数据。

迫于无奈将存储过程做了一下修改,去掉了输出参数:

select  count(CardID) from StudentInfo where CardID=@CardID  and Available=@Available 

经过这样修改之后可以正常运行,仔细分析了一下问题应该出在存储过程的输出参数和datareader的读取数据的数据类型对象上。

在存储过程中,指明的输出类型是一个整型数据,而不是从数据库表中直接读取,或者经过查询语句得到的临时的表数据,而datareader支持的数据源对象是基于数据库的相关的数据类型,因此,始终无法获取数据。

我们可以在数据访问层加上一句话来验证在vb.net的数据访问层指定的对应存储过程的输出变量(sqlParamIntCountCardID)已经获得了数据。

MsgBox(sqlParamIntCountCardID.Value.ToString)

调试这段程序用了很长时间,不过总算是有收获,从这次犯得错误中明白了datareader对象和存储过程的输出参数这两种程序元素的使用规则,从更深一个层次上明白了,学习看本质的重要性!我觉得写程序是一个锻炼我们思维严密性的一个过程,编写程序是一件锻炼人的事儿,在学习程序之初,更多的是锻炼和提升,到了后期就是一种享受了,我想这也就是程序员的快乐之一吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值