使用DB2 .NET Data Provider调用异步过程

时间:2009-05-13 10:00:37

标签: database ado.net db2

有没有办法使用DB2 .NET Data Provider异步调用DB2存储过程?

4 个答案:

答案 0 :(得分:2)

有很多方法 - 哪种方式适合取决于您的方案。

我在Oracle中所做的是基于工作项ID队列从数据库中获取1000个XML项。使用datareader一次性完成这些操作并不起作用,所以我在几个不同的线程上一次一个地获取它们(每个线程从队列中获取一个工作项,直到队列为空)。当每个单独的线程得到结果时,它将XML放入生成器使用者队列 - 一个基于Joseph Albahari's excellent threading tutorial的队列。一个单独的线程查看了生产者消费者队列,对数据执行了XSL转换并将它们写入文件 - 当然我首先在单线程中进行基准测试,这显然更慢。

我尝试使用threadpool / asynchronous delegates开头(因为关于线程的一般建议是尽可能使用线程池,委托也间接做),这可能会对你提供帮助没有超过64项要做。 WaitHandle.WaitAll usually has a limit of 64 work items.。因为我有1000多岁,这不是一个好的选择,除了分批进行64次看似kludgy。

从内存中,当每个人都没有更多工作时,我优雅地退出生产者线程,然后阻塞,直到生产者消费者队列也为空。

最重要的是确保每个线程上都有完全独立的DB对象,否则你会偶然发现线程问题。

如果您只想在Windows窗体/ WPF应用程序中执行异步执行1个存储过程,您可能需要查看background worker component

如果您知道是否需要任何进一步的信息,请告诉我。

答案 1 :(得分:1)

BeginExecuteNonQuery不起作用?

答案 2 :(得分:1)

如果DB2不支持BeginExecuteReader,则可以使用异步委托来完成这一操作。从功能上讲,除了你自己实现它而不是使用内置的东西之外,它会是同样的事情。

查看此处的示例:sql async query problem…

答案 3 :(得分:0)

问题是没有BeginExecuteNonQuery。