通过外部SQL Server进行异步调用

时间:2011-03-10 00:03:39

标签: .net sql-server visual-studio-2008 sql-server-2008

如何通过外部C# ADO.Net运行异步调用? 如何异步执行查询,BeginExecuteQuery ??。

你有一个例子可以运行......

我有一个正在执行多个插入语句的存储过程,这些值是从表中选择的,因为它们是独立的,TABLE_A, TABLE_B,我想执行...

EXEC ('SELECT * FROM .. INTO TABLE_A')

and 

EXEC ('SELECT * FROM .. INTO TABLE_B')

1 个答案:

答案 0 :(得分:0)

如果我理解你想要正确做什么,那么是的,你可以对3个命令,ExecuteReader,ExecuteNonQuery和ExecuteXmlReader进行异步调用。 asynch版本有一个Begin / End部分,例如BeginExecuteReader,EndExecuteReader,可以用于你所追求的目标。在如何处理这些命令的返回方面,您有几个选项。

因此,您可以使用sqlcommand.BeginExecuteReader触发多个查询,然后您可以选择在发出sqlcommand.EndExecuteReader时如何处理/知道它何时完成。有一些描述的选项简要概述:

  1. 异步轮询 - 基本上发送sql命令,然后重复检查SqlAsyncResult的IsCompleted属性,直到它返回。
  2. 异步回调 - 使用此方法提供回调例程作为参数以及sql命令,例如: onSqlQueryComplete(有点像常规事件处理),并在完成时调用。
  3. 异步等待 - 如果您想等待并监视sql调用进程/进度,则使用此异步等待。
  4. 每个异步选项都有优点/缺点,具体取决于您想要实现的目标。使用上面的数字2回调选项,pseduo-code看起来像:

    command = (Build all sql command stuff)
    AsyncCallback callback = new AsyncCallback(HandleSqlCallback);
    command.BeginExecuteReader(callback, command);
    
    command.BeginExecuteReader()
    
    method HandleSqlCallback(IAsyncResult result) {
    do stuff when sql done
    command.EndExecuteReader(result)
    }
    

    微软有比这更好,更完整的示例,但这可以让您对格式有一个大概的了解。 SqlCommand.BeginExecuteReader Method

    的MSDN链接