从C#中的存储过程返回最后一个SELECT值

时间:2015-04-20 15:17:48

标签: c# sql tsql

我在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中获取值吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

do {   while (reader.Read()) 
       { 
           // TODO: read away
       }
   }   while (reader.NextResult())