c# 处理存储过程output返回值的问题

我用ExecuteNonQuery方法执行存储过程时,output的属性值就能获得,而我用ExecuteReader方法,却获得不了,怎么回事?(目的:最终结果集和out... 我用ExecuteNonQuery方法执行存储过程时,output的属性值就能获得,
而我用ExecuteReader方法,却获得不了,怎么回事?
(目的:最终结果集和output的值都能获得)
存储过程代码:http://hi.baidu.com/janksandks/blog/item/e08ae22d7cf3453e359bf7dc.html
谢谢一楼的答案,那请问怎么既能得到返回值,又能得到查询后的数据呢?
这两个值其实可以通过代码来实现,可是得到这两个值需要 总记录数
总记录数 又要执行一次SQL语句才能获得,感觉浪费资源(我只会这样做才能得到 总记录数 如果有什么好的办法共享一下o(╯□╰)o)
展开
 我来答
xshasha521
2009-12-20
知道答主
回答量:28
采纳率:0%
帮助的人:12.5万
展开全部
因为ExecuteReader每次读取一行,没有和数据库断开连接,就像一个方法正在执行中,还没执行return呢。所以没值。
而ExecuteNonQuery是根据条件全查出来了放在你本地内存,就像一个方法执行完一样,所以return也执行了,也就有值。

返回值我一般写在添加等操作的存储过程里,查询没必要即查询结果还要在附带一个返回值。不如只查结果,返回值不就是通过一些计算得来的吗,完全可以在代码中计算出来。

比如我添加的存储过程是:
ALTER PROC [dbo].[sp_InsertModal]
@ModalName int
AS
INSERT tb_Modal(ModalName) values(@ModalName);
SELECT @@IDENTITY;
通过@@IDENTITY我能在添加一条数据后,直接拿到此数据的id数(自动增长的)。

像查询的都写成:
ALTER PROC [dbo].[sp_SelectLog]
@LogWork VARCHAR(50),
@StartTime DATETIME,
@EndTime DATETIME,
@UserId INT,
@ModalId INT
AS
SELECT LogId,LogWork,CreateTime,UserId,ModalId
FROM tb_Log tl
WHERE (@LogWork='' OR tl.LogWork=@LogWork)
AND (@StartTime <= tl.CreateTime AND @EndTime >= tl.CreateTime)
AND (@UserId = 0 OR tl.UserId = @UserId)
AND (@ModalId = 0 OR tl.ModalId = @ModalId)
楼主考虑一下,如果存储过程不好解决可以试着在代码中去处理。 因为存储过程也是类似于程序中的方法。在存储过程里面处理业务逻辑和方法里面是一样的。但你要考虑那个更适合你的程序。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式