05.05.2011, 15:13 | #1 |
Участник
|
Обработка 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)); } |
|
|
За это сообщение автора поблагодарили: Pustik (5), Ace of Database (4), lev (5), Poleax (4), MikeR (3), gl00mie (10). |
Теги |
.net, dbf, fastdbf, законченный пример, полезное |
|
|