【问题标题】:Asynchronous calls though external SQL Server通过外部 SQL Server 进行异步调用
【发布时间】:2011-03-10 00:03:39
【问题描述】:

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

你有例子可以运行吗...

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

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

and 

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

【问题讨论】:

  • 一种选择是使用 BackgroundWorker。请解释您的背景...

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


【解决方案1】:

如果我理解您想要正确执行的操作,那么可以,您可以对 3 个命令 ExecuteReader、ExecuteNonQuery 和 ExecuteXmlReader 执行异步调用。异步版本有一个开始/结束片段,例如BeginExecuteReader、EndExecuteReader 并且可以满足您的需求。在如何处理这些命令的返回方面,您有几个选择。

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

  1. 异步轮询 - 基本上是发送 sql 命令,然后反复检查 SqlAsyncResult 的 IsCompleted 属性,直到它返回。
  2. 异步回调 - 您提供回调例程作为参数以及使用此方法的 sql 命令,例如onSqlQueryComplete (有点像常规事件处理),并在完成时调用。
  3. 异步等待 - 如果您想等待并监控您的 sql 调用进程/进度,则使用此选项。

每个异步选项都有优点/缺点,具体取决于您想要实现的目标。使用上面的 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)
}

Microsoft 有比这更好、更完整的示例,但这可以让您大致了解格式。 SqlCommand.BeginExecuteReader Method的 MSDN 链接

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多