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 が null の場所です。私が見つけたすべてのチュートリアルまたは投稿では、すべてを正しく行っているようです。この時点で、何か小さなものが欠けているだけで、別の目が必要だと思います. また、MSサイトで見つけた1つの投稿が必要だと言ったので、他のすべての前に戻りパラメーターを設定しようとしましたが、どこにあるかに関係なく、nullを返します。

4

1 に答える 1

7

戻り値はデータベースからの応答で最後に送信されるため、戻り値にアクセスする前に結果セットを完全に読み取る必要があります。

クラスは何をしSafeDataReaderますか?結果セット全体が読み取られないようにすることは可能ですか?

戻り値を読み取るコードをusing、データ リーダーのブロックの外に移動してみてください。これは、戻り値が利用可能になるように、結果セットを超えて応答を進めるのに役立つ場合があります。

于 2011-03-23T22:21:09.417 に答える