【问题标题】:Output parameters not updated after ExecuteReader()ExecuteReader() 后输出参数未更新
【发布时间】:2010-12-07 07:55:21
【问题描述】:

当我运行 cmd.ExecuteScalar() 或 cmd.ExecuteNonQuery() 时,命令对象上的 Output 和 InputOutput 参数会根据存储过程中的更改进行更新。但是 cmd.ExecuteReader() 不会发生同样的情况。这发生在 Sql Server 和 MySql Connections 上。这是设计使然吗?

【问题讨论】:

  • 能否提供示例代码?

标签: c# sql mysql database


【解决方案1】:

嘿,这可能会对您有所帮助。 clicky...

在某些情况下,这似乎是个问题。

【讨论】:

  • 答案就在那里。阅读器必须读到最后或关闭才能更新参数。在阅读器完成后,我将对参数的评估移至 ,现在它可以工作了。谢谢。
【解决方案2】:

只有在读取到记录集末尾后,输出参数才可用。

例如,在这个过程中:

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

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

【讨论】:

    【解决方案3】:

    您应该能够通过输出参数检索该值。请查看这篇 MS 支持文章,看看您的问题是否属于提到的问题之一:link text

    另外,你想返回什么?如果它只是一个值,则值得使用 ExecuteScalar() 而不是 ExecuteReader()。

    【讨论】:

      猜你喜欢
      • 2019-09-12
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      相关资源
      最近更新 更多