我正在尝试获取 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。
返回值是在数据库响应的最后发送的,因此您必须完整读取结果集才能访问返回值。
什么是SafeDataReader
类做什么?它是否有可能阻止读取整个结果集?
尝试将读取返回值的代码移到using
数据读取器的块。这可能有助于将响应推进到结果集之外,以便返回值可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)