Как я могу получить возвращаемое значение хранимой процедуры при использовании SqlDataReader?

Нельзя ли получить возвращаемое значение хранимой процедуры при использовании устройства чтения данных? Возвращаемое значение всегда равно null, но SP возвращает допустимое целое число из SSMS.

myCommand.CommandText = "GetVenueVideos";
SqlParameter retVal = new SqlParameter("@returnValue",SqlDbType.Int);
retVal.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(retVal);
myReader = myCommand.ExecuteReader();
if (myReader.Read() && myReader.HasRows)
{
    int returnValue = Convert.ToInt32(retVal.Value);
    //returnValue is null at this point
}

person NickG    schedule 11.11.2011    source источник


Ответы (1)


Ах. Я узнал, что читатель должен быть закрыт, чтобы получить возвращаемое значение! Поэтому внутри блока if {} выше я добавил:

myReader.Close(); // Need to close data reader before getting return value.
int returnValue = (int)myCommand.Parameters["@returnValue"].Value;

... и теперь он работает нормально!

person NickG    schedule 11.11.2011
comment
На самом деле это задокументировано в MSDN, хотя и не очень заметно. Например, см. раздел Примечания документа msdn.microsoft.com/en-us/library/ или раздел Закрытие DataReader на msdn.microsoft.com/en-us/library/haa3afyz.aspx. - person LukeH; 11.11.2011
comment
Очень хорошо! Закрытие DataReader помогло и мне. - person Nikos Baxevanis; 12.11.2015