我正在尝试获取结果集并在SQL 2008服务器上返回存储过程的值。当我在sql management studio中运行proc时,我得到了结果集和返回值。
但是,当我尝试在C#4.0中获取值时,参数的值为null。这是我的C#代码:
using (ConnectionManager<SqlConnection> cn = ConnectionManager<SqlConnection>.GetManager(CultureInfo.CurrentCulture.Name))
{
using (SqlCommand cm = cn.Connection.CreateCommand())
{
cm.CommandText = "Name of proc here";
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.AddWithValue("@ApplicationId", ApplicationId);
cm.Parameters.AddWithValue("@Index", Index);
if (PageSize > 0)
cm.Parameters.AddWithValue("@PageSize", PageSize);
cm.Parameters.Add("@ReturnValue", SqlDbType.Int);
cm.Parameters["@ReturnValue"].Direction = ParameterDirection.ReturnValue;
using (IDataReader dr = cm.ExecuteReader())
{
SafeDataReader sdr = new SafeDataReader(dr);
while (sdr.Read())
{
UserApplicationEntity uae = new UserApplicationEntity();
uae.UserId = sdr.GetGuid("UserId");
uae.ExternalId = sdr.GetString("ExternalId");
Result.Value.Collection.Add(uae);
}
Result.Value.TotalResults = (int)cm.Parameters["@ReturnValue"].Value;
}
}
}
我调用Result.Value.TotalResults =(int)cm.Parameters [“@ ReturnValue”]的最后一行。值;是值为null的位置。我发现的每个教程或帖子,我似乎正在做正确的事情。在这一点上,我想我只是缺少一些小东西,需要另一组眼睛。我也尝试在所有其他人之前设置返回参数,因为我在MS网站上找到的一个帖子说我需要,但不管它在哪里,它都返回null。
答案 0 :(得分:7)
返回值在数据库的响应中最后发送,因此您必须先完整读取结果集,然后才能访问返回值。
SafeDataReader
课程做什么?是否有可能阻止读取整个结果集?
尝试将读取返回值的代码移到数据读取器的using
块之外。这可能有助于将响应推进到结果集之外,以便返回值可用。