AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.05.2011, 15:13   #1  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
? Обработка DBF через .net
Возможно кому то пригодится NET компонент (DLL) для работы с файлами dbf в Аксапта...

Приимущества данного решения:

- Надежность (не требуется использования "глючных" ADODB, ODBC и так далее.)
- Быстродействие (обработка файла KLADR.DBF (198 тыс записей) заняла 25 секунд, пример - ниже)
- Возможность использования как на сороне клиента, так и на стороне сервера в т.ч. x64

Компонент самописный, взято отсюда: http://www.sql.ru/Forum/actualthread...194256#7194256
(спасибо автору)

Компонент преобразует dbf файл в стандартный объект NET DataTable. Так же умеет делать и обратную процедуру.

Пример использования - ниже. Как и другие NET компоненты, данную DLL перед использованием нужно "прописать" в Reference AOT аксапты.
X++:
static void DBFTest(Args _args)
{
    System.Data.DataTable           dt;
    System.Data.DataRowCollection   rows;
    System.Data.DataRow             row;
    int                             cnt;
    int                             i;
    str                             name;
    str                             code;
    int                             t1, t2;
    ;
    new InteropPermission(InteropKind::ClrInterop).assert();

    try
    {
        t1 = timeNow();
        
        dt = DBFclient.DirectAccess::Load("c:\\kladr.DBF");

        rows = dt.get_Rows();

        cnt = rows.get_Count();
        
        info(strFmt("строк %1", cnt));

        for (i = 0; i < cnt; i++)
        {
            row = rows.get_Item(i);

            name = row.get_Item("name");
            code = row.get_Item("code");
        }
    }
    
    catch (exception::CLRError)
    {
        throw error(AifUtil::getClrErrorMessage());
    }

    catch (exception::Internal)
    {
        throw error("Internal");
    }

    CodeAccessPermission::revertAssert();
    
    t2 = timeNow();
    
    info(strFmt("%1", t2 - t1));
    
}
Привожу саму DLL и проект с ее исходными кодами (возможно пригодится что то исправить...)
Вложения
Тип файла: zip SourceDBFclient.zip (27.7 Кб, 267 просмотров)
Тип файла: zip DBFclient.zip (5.0 Кб, 269 просмотров)
За это сообщение автора поблагодарили: Pustik (5), Ace of Database (4), lev (5), Poleax (4), MikeR (3), gl00mie (10).
Теги
.net, dbf, fastdbf, законченный пример, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
UTF8 -> CP866 через .NET подскажите demoded DAX: Программирование 2 02.03.2011 14:23
AX.NET: интеграция .NET-приложений с Аксаптой и (будущие) возможности облачных вычислений gl00mie DAX: Программирование 2 23.04.2010 00:47
Вложение файлов через метод .NET Business Connector (DocuRef, DocuValue) kornix DAX: Программирование 6 18.09.2009 10:36
Как через .NET коннектор удалить записи? Jab Straight DAX: Программирование 6 09.11.2007 18:56
Не могу залогиниться через .NET connector. axy DAX: Программирование 3 06.12.2006 14:04

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:24.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.