6

我正在尝试获取 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"].Value; 的最后一行 是 Value 为空的地方。我发现的每一个教程或帖子,我似乎都做对了。在这一点上,我想我只是缺少一些小东西,需要另一双眼睛。我还尝试在所有其他参数之前设置返回参数,因为我在 MS 网站上找到的一篇文章说我需要这样做,但无论它在哪里,它都会返回 null。

4

1 回答 1

7

返回值在数据库的响应中最后发送,因此您必须完整读取结果集才能访问返回值。

SafeDataReader班级做什么?是否有可能阻止读取整个结果集?

尝试将读取返回值的代码移到using数据读取器的块之外。这可能有助于将响应推进到结果集之外,以便返回值可用。

于 2011-03-23T22:21:09.417 回答