2009-10-16 43 views
3

当我运行cmd.ExecuteScalar()或cmd.ExecuteNonQuery()时,命令对象上的Output和InputOutput参数将从存储过程中的更改中更新。但是,对于cmd.ExecuteReader()不会发生同样的情况。这发生在Sql Server和MySql连接上。这是行为设计​​吗?ExecuteReader()后未更新输出参数

+0

你能提供一个示例代码吗? – Restuta 2009-10-16 10:24:03

回答

8

嘿,这可能会帮助你。 clicky...

看来在某些情况下这可能是一个问题。

+1

答案就在那里。读者必须阅读到最后或关闭参数才能更新。我将我对参数的评估提交给读者完成后,现在它工作。谢谢。 – 2009-10-16 10:33:47

0

您应该能够通过输出参数检索值。看看这个MS支持文章,看看你的问题是否是提到的那些:link text

此外,你想要返回什么?如果它只是一个单值,那么使用ExecuteScalar()而不是ExecuteReader()是值得的。

1

输出参数仅在您读取到记录集的末尾后才可用。

例如,在此过程中:

alter procedure db.TestProc(@p int output) 
as 
select 1 
select 1 
set @par = 1 

该数据库将只设置@par你读过这两个记录集后。在读完第一个之前,数据库甚至不会执行第二个SELECT。它是在您请求它们时流式传输的结果。