【问题标题】:Return last SELECT value from stored procedure in C#从 C# 中的存储过程返回最后一个 SELECT 值
【发布时间】:2015-04-20 15:17:48
【问题描述】:

我在 C# 中使用 SqlCommand.ExecuteScalar 来获取 Microsoft SqlServer 中存储过程的结果。结果应该由存储过程的最后一个命令-“SELECT something”设置。

它与过程中的一个 SELECT 命令一起正常工作。但是,当存储过程中有更多 SELECT 时,它会出错。好像返回的是第一个 SELECT 的结果:

  CREATE PROCEDURE TestProcedure AS      
  BEGIN
  SELECT 'A'
  SELECT 'B"
  END

执行它将通过 ExecuteScalar 返回“A”

我正在使用其他人的程序,他在其中使用了很多 SELECT 命令,显然是为了在 Sql Magagement Studio 中进行测试。我宁愿不能改变它们。

我能否从最终的 SELECT 中获取值?

【问题讨论】:

  • 您可以使用ExecuteReader 代替ExecuteScalar,然后使用NextResult
  • 你需要使用SqlCommand.NextResult来获取下一个结果集。

标签: c# sql tsql


【解决方案1】:

您需要使用SqlDataReader.NextResult 来获取下一个结果集。它返回一个boolean 值以指示是否有下一个。要获得最后一个,只需继续调用NextResult,直到它返回false

var reader = command.ExecuteReader();
while (reader.NextResult())
{
    //We still haven't reached the last result set yet...
}

【讨论】:

  • @Blam 这正是被问到的! :)
  • 但他不想破坏正在运行的东西。 “它在过程中与一个 SELECT 命令一起正常工作。”
  • @Blam 当程序中有一个 SELECT 时,此代码也可以正常工作。 OP 只想看到最后一个 SELECT 结果。
【解决方案2】:
do {   while (reader.Read()) 
       { 
           // TODO: read away
       }
   }   while (reader.NextResult())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多