使用SqlDataReader对象时,我怎样才能得到存储过程的返回值?存储过程、返回值、对象、SqlDataReader

2023-09-03 08:00:17 作者:痞味大叔

这难道不是可能得到一个存储procedeure的返回值使用DataReader时?返回值总是空,但SP从内部SSMS返回一个有效的int。

  myCommand.CommandText =GetVenueVideos;
的SqlParameter retVal的=新的SqlParameter(@的returnValue,SqlDbType.Int);
retVal.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(retVal的);
myReader = myCommand.ExecuteReader();
如果(myReader.Read()&安培;&安培; myReader.HasRows)
{
    INT的returnValue = Convert.ToInt32(retVal.Value);
    //的returnValue是在这一点空
}
 

解决方案

哎。我发现读者已经被关闭,以获得返回值!所以上面的,如果{}块里面,我说:

  myReader.Close(); //需要得到返回值之前关闭数据读取器。
INT的returnValue =(int)的myCommand.Parameters [@的returnValue]值。
 

......,现在,它的工作原理确定!

我们决定简单朴实的送你一个小福利

Is it not possible to get the return value of a stored procedeure when using a datareader? The return value is always null, but the SP returns a valid int from within 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
}

解决方案

Agh. I've found out the reader has to be closed to get the return value! So inside the if {} block above, I added:

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

...and now it works OK!

 
精彩推荐
图片推荐