Есть ли способ асинхронного вызова хранимой процедуры DB2 с использованием поставщика данных DB2 .NET?Асинхронный вызов процедуры с поставщиком данных DB2 .NET
ответ
BeginExecuteNonQuery не работает?
Проблема в том, что нет BeginExecuteNonQuery.
Существует несколько способов, которые подходят друг другу, будет зависеть от вашего сценария.
Что я делал в Oracle, я получал 1000 единиц элементов XML из БД на основе очереди идентификаторов рабочих элементов. Получение их в один проход с datareader не сработало, поэтому я получил их по одному на несколько разных потоков (каждый поток получил рабочий элемент из очереди, пока очередь не была пуста). Поскольку каждый отдельный поток получил результат обратно, он помещал XML в очередь производителей-производителей на основе Joseph Albahari's excellent threading tutorial. Отдельный поток смотрел на очередь потребителей-производителей, выполнял преобразования XSL по данным и записывал их в файл - конечно, я сначала тестировал однопоточность, и это было значительно медленнее.
Я попытался с помощью threadpool/asynchronous delegates начать с (как общие рекомендации по резьбе является использование ThreadPool, где это возможно, что делегаты действительно косвенно, а), которые могут работать при условии не более чем на 64 пунктов делать. WaitHandle.WaitAll
usually has a limit of 64 work items.. Поскольку у меня было 1000, это не было хорошим вариантом, кроме того, что они делали их в партиях 64, которые казались клочковыми.
Из памяти я изящно выходил из потоков производителей, когда больше не было работы для каждого из них, а затем блокировалось до тех пор, пока очередь потребителей-производителей также не была бы пустой.
Главное, чтобы убедиться, что у вас есть полностью отдельные объекты БД для каждого потока, иначе вы наткнетесь на проблемы с потоками.
Если вы хотите просто выполнить 1 хранимую процедуру асинхронно в приложении Windows/WPF, вы можете посмотреть на использование background worker component.
Дайте мне знать, если вы знаете, нужна ли вам дополнительная информация.
Если DB2 не поддерживает BeginExecuteReader, вы можете использовать асинхронные делегаты для выполнения трюка. Функционально это будет одно и то же, за исключением того, что вы сами его реализуете, а не используете что-то встроенное.
Проверьте пример здесь: sql async query problem…
- 1. Вызов хранимой процедуры DB2 в функции DB2
- 2. TransactionScope не будет работать с поставщиком DB2
- 3. вызов хранимой процедуры db2 из zend
- 4. Асинхронный вызов backendless данных
- 5. Вызов хранимой процедуры из .net
- 6. SQL1159 Ошибка инициализации с поставщиком данных DB2 .NET, код причины 7, токены 9.5.0.DEF.2, SOFTWARE \ IBM \ DB2 \ InstalledCopies
- 7. вызов данных из процедуры
- 8. Асинхронный вызов C# .Net beginners question
- 9. VBA Асинхронный вызов данных с HTTP
- 10. Подключение к базе данных DB2 DB2 с .NET
- 11. Weblogic: вызов хранимой процедуры DB2 без имени схемы (свойство currentSchema)
- 12. Асинхронный вызов хранимой процедуры SQL Server в C#
- 13. db2 список хранимой процедуры в базе данных
- 14. Вызов хранимой процедуры DB2 из связанного сервера SQL Server 2008
- 15. Вызов одной хранимой процедуры в другую хранимую процедуру в DB2
- 16. db2 формат хранимой процедуры
- 17. хранимой процедуры в DB2
- 18. асинхронный вызов хранимой процедуры в MVC Пример контроллера
- 19. Процедура DB2 SQL - вызов инициирующей процедуры перед объявлением
- 20. Параметризованная DB2 Query С .NET
- 21. Оператор DB2 хранимой процедуры IF
- 22. Вызов хранимой процедуры с XML Тип данных
- 23. Вызов процедуры сохранения данных Oracle с NHibernate
- 24. WCF ChannelFactory асинхронный вызов
- 25. Асинхронный вызов в HTML5?
- 26. Асинхронный вход в базу данных .Net
- 27. Parse - Асинхронный вызов блока
- 28. Django асинхронный вызов
- 29. Асинхронный вызов WCF с C#?
- 30. Асинхронный вызов с несколькими контекстами
Это, конечно, в случае с Oracle, что нет BeginExecuteNonQuery. Я не знаю о поставщике данных DB2 .NET. Для Oracle мне приходилось выполнять асинхронную работу. – RichardOD