带输出参数的存储过程

前端之家收集整理的这篇文章主要介绍了带输出参数的存储过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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对象和存储过程的输出参数这两种程序元素的使用规则,从更深一个层次上明白了,学习看本质的重要性!我觉得写程序是一个锻炼我们思维严密性的一个过程,编写程序是一件锻炼人的事儿,在学习程序之初,更多的是锻炼和提升,到了后期就是一种享受了,我想这也就是程序员的快乐之一吧!

猜你在找的VB相关文章