0

我有一个长时间运行的存储过程,它返回多个结果。

我想异步迭代结果并在结果准备好时获取结果(因为它们可用)。

ExecuteReaderAsync有一些WaitOne逻辑?(从未使用过这个,所以任何例子都值得赞赏)

这可能吗?

private IEnumerable<DataTable> validationResultSets(string MOName, DateTime StartDate, DateTime EndDate, string FilePath)
{
    DataTable d;
    using (SqlConnection conn =
    new SqlConnection(connString))
    {
        conn.Open();

        using (cmd = new SqlCommand("dbo.sp_ValidateAcceptanceFile", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter
            {
                ParameterName = "@MOName",
                Value = MOName,
                SqlDbType = SqlDbType.VarChar,
                Size = 255
            });

            cmd.Parameters.Add(new SqlParameter
            {
                ParameterName = "@StartDate",
                Value = StartDate,
                SqlDbType = SqlDbType.DateTime
            });

            cmd.Parameters.Add(new SqlParameter
            {
                ParameterName = "@EndDate",
                Value = EndDate,
                SqlDbType = SqlDbType.DateTime
            });

            cmd.Parameters.Add(new SqlParameter
            {
                ParameterName = "@FilePath",
                Value = FilePath,
                SqlDbType = SqlDbType.VarChar,
                Size = 500
            });

            //IDataReader rdr = cmd.ExecuteReader();
            IDataReader rdr = cmd.BeginExecuteReader(); //??
            try
            {
                do
                {
                    d = new DataTable();
                    d.Load(rdr);
                    yield return d;
                } while (!rdr.IsClosed);
            }
            finally
            {
                rdr.Close();
                rdr.Dispose();
            }
        }
    }
}
4

1 回答 1

0

你在混合概念。返回多个结果的过程与 MARS 没有任何关系。可以异步调用返回多个结果的过程,请注意,一旦从服务器返回结果的第一个片段,您的异步调用就会完成,然后您就可以像在同步代码中一样读取结果。

于 2013-07-16T21:08:23.700 回答