Показаны сообщения с ярлыком Visual Studio 2012. Показать все сообщения
Показаны сообщения с ярлыком Visual Studio 2012. Показать все сообщения

четверг, 26 декабря 2013 г.

Реализация асинхронной загрузки FillAsync для DbDataAdapter в .NET Framework 4.5 с помощью async и await

Добрый день.
Не так давно я начал изучать нововведения в .NET Framework 4.5
В частности заинтересовала реализация async и await методов.
Сам постоянно работаю с базами данных, которые загружаю с помощью BackgroundWorker или другого потока, чтобы не блокировать интерфейс пользователя при долгой загрузке.
Но меня расстроило отсутствие встроенной возможности асинхронной загрузки через  DbDataAdapter от которого наследуются адаптеры данных. Метод FillAsync просто отсутствует.

OpenAsync() в DbConnection есть, ReadAsync() в DbDataReader есть, а вот FillAsync() в DbDataAdapter нет. Для меня это оказалось серьезным поводом не обновлять мои проекты, т.к. везде используется Fill в адаптере данных.

Но немного подумав, я решил все таки реализовать такой метод сам.
В итоге я написал расширение для DbDataAdapter.
И хочу рассказать вам как я это сделал.

Добавляем в проект новый класс с любым именем, например StaticData.
Со следующим кодом:

using System.Data;
using System.Data.Common;
using System.Threading.Tasks;

namespace AsyncAwaitTesting1
{
    static class StaticData
    {
        public static async Task FillAsync(this DbDataAdapter da, DataTable ds)
        {
            var t = new Task(() => Load(da, ds));            
            t.Start();
            return await t;
        }

        private static int Load(DbDataAdapter da, DataTable dt)
        {            
            return da.Fill(dt);
        }
    }
}




Допустим в проекте уже имеется набор данных. Перейдем к редактору кода:


Добавим код на на рисунке ниже


Прошу обратить внимание что для примера тут расширен адаптер данных только для одной таблицы Codebranch. По идее это нужно сделать для всех таблиц набора данных.
Еще обратите внимание что пространство имен тут тоже другое.

В итоге верхний код добавляет метод FillAsync для адаптера данных.
Работает это так:
int i = await codebranchTableAdapter1.FillAsync(dynPlatformDataSet1.Codebranch);

А вот сам код обработчика


Теперь, при таком сценарии действия метод Fill выполняется асинхронно, не блокируя UI.
Пока неудобство представляет необходимость вручную добавлять методы FillAsync для каждого типизированного адаптера данных.

Хотелось бы чтобы разработчики, все таки учли это и сами включили метод FillAsync для адаптеров данных в будущих редакциях NET Framework.

Пока что все

пятница, 9 августа 2013 г.

Firebird DDEX provider для Visual Studio 2012

Добрый день, коллеги.
Представляю вашему внимаю новый релиз установщика провайдера DDEX для работы в Visual Studio 2012 с базами данных Firebird. Поддерживается ADO.NET и Entity Framework.

Скачать вы можете по ссылке.

пятница, 28 сентября 2012 г.

Firebird DDEX Provider 2.0.6 для Visual Studio 2012 готов.

Коллеги, представляю вашему внимаю доработанный инсталятор инструментов Firebird DDEX для Visual Studio 2008/2010/2012. Этот инсталятор был успешно протестирован мной с Visual Studio 2010 и Visual Studio 2012. 

Скачать Firebird DDEX 2.0.6 для Visual Studio 2012 можно по ссылке.
Отдельно скомпилировал локализованный русский инсталятор и отдельно английский. Скачивайте тот, который вам нужен. Кроме как языками установщика они ни чем не отличаются.

В комплекте сидит библиотека FirebirdSql.Data.FirebirdClient.dll версии 2.7.7 для .NET Framework 3.5.








Счастливых разработок коллеги.