使用SqlDataReader时如何获取存储过程的返回值?

Nic*_*ckG 7 .net sql asp.net sqldatareader

使用datareader时是否无法获得存储过程的返回值?返回值始终为null,但SP从SSMS中返回有效的int.

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
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ckG 12

哎.我发现读者必须关闭以获得返回值!所以在上面的if {}块中,我添加了:

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

......现在它工作正常!

  • 这实际上是在MSDN上记录的,尽管不是很突出.例如,请参阅http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx的*"备注"*部分或http:的"关闭DataReader"*部分. //msdn.microsoft.com/en-us/library/haa3afyz.aspx. (4认同)