Показать сообщение отдельно
Старый 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).