当我运行cmd.ExecuteScalar()或cmd.ExecuteNonQuery()时,命令对象上的Output和InputOutput参数将从存储过程中的更改中更新。但是cmd.ExecuteReader()也不会发生同样的情况。这在Sql Server和MySql Connections上都会发生。这是设计的行为吗?
答案 0 :(得分:9)
嘿,这可能对你有所帮助。 clicky...
在某些情况下,这可能是一个问题。
答案 1 :(得分:1)
输出参数仅在您读取到记录集的末尾后才可用。
例如,在此过程中:
alter procedure db.TestProc(@p int output)
as
select 1
select 1
set @par = 1
只有在读取了两个记录集后,数据库才会设置@par。在您完成第一个SELECT读取之前,数据库甚至不会执行第二个SELECT。它是您请求时的流式传输结果。
答案 2 :(得分:0)
您应该能够通过Output参数检索值。请查看此MS支持文章,看看您的问题是否是上述问题之一:link text
另外,你想回来的是什么?如果它只是一个值,那么使用ExecuteScalar()而不是ExecuteReader()是值得的。