2013-07-16 41 views
0

我有一个长时间运行的存储过程,返回多个结果。是否有可能迭代多个数据集异步BeginExecuteReader?

我想迭代异步的结果,并抢结果,因为它们已经准备好(因为它们是可用)。

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(); 
      } 
     } 
    } 
} 
+0

结束了分裂出来为单独的SPS和wonkering临时表的策略到指定的表与作业ID标签。太可惜了:-( –

回答

0

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

+0

感谢,我摆脱了MARS评论 –

+0

尝试异步的等待,更容易:[ExecuteReaderAsync(http://msdn.microsoft.com/en-us/library/system.data.sqlclient。 sqlcommand.executereaderasync.aspx)阅读(http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx)与异步和等待异步编程。需要.NET 4.5 –

+0

我想他们迭代随着变得可用 –

相关问题