2011-11-11 50 views
4

使用數據讀取器時,是否無法獲取存儲過程的返回值?返回值始終爲空,但SP從SSMS中返回一個有效的int。如何在使用SqlDataReader時獲取存儲過程的返回值?

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 
} 

回答

9

Agh。我發現讀者必須關閉以獲得回報價值!因此,在上面的if {}塊中,我添加了:

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

...現在它工作正常!

+4

這實際上記錄在MSDN上,雖然不是非常顯眼。例如,請參閱http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx的*「備註」*部分或http://「關閉DataReader」部分* //msdn.microsoft.com/en-us/library/haa3afyz.aspx。 – LukeH

+0

非常好!關閉DataReader對我也有好處。 –

相關問題