powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Медленная запись в DBF черзе OleDb
3 сообщений из 3, страница 1 из 1
Медленная запись в DBF черзе OleDb
    #36780026
|\/|AX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте.
Возникла проблема с записью в DBF файл. Нужно добавить в него около 150000 строк, но вставка тянется очень медленно, а файл выходит жутко разбухший.

вот код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
        const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;";
        const string CreateStatement = "CREATE TABLE {0}(CODE CHAR(20), DISC DOUBLE, CLI INTEGER, NAME CHAR(50), DEL INTEGER)";
        const string InsertStatement = "INSERT INTO {0}(CODE, DISC, CLI, NAME, DEL) VALUES(?, ?, ?, ?, ?)";
            string Connection = String.Format(ConnectionString, path);
            using (OleDbConnection con = new OleDbConnection(Connection))
            {
                con.Open();
                using (OleDbCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = String.Format(CreateStatement, filename);
                    cmd.ExecuteNonQuery();

                    cmd.CommandText = String.Format(InsertStatement, filename);
                    cmd.Parameters.Add("CODE", OleDbType.Char, 20, "CODE");
                    cmd.Parameters.Add("DISC", OleDbType.Numeric, 5, "DISC");
                    cmd.Parameters.Add("CLI", OleDbType.Numeric, 10, "CLI");
                    cmd.Parameters.Add("NAME", OleDbType.Char, 80, "NAME");
                    cmd.Parameters.Add("DEL", OleDbType.Numeric, 1, "DEL");

                    using (OleDbDataAdapter adapter = new OleDbDataAdapter())
                    {
                        adapter.InsertCommand = cmd;
                        adapter.Update(ds, "DBF");
                    }
                }
            }

Пробовал делать это без адаптера через cmd.ExecuteNonQuery() ничего не убыстряется и не замедляется. Процесс записи еле ползет и конца и края нет. Еще я так понял, что OleDb не особо на типы смотрит. Для нее, что integer, что double.
Пробовал через Odbc вылетает сообщение об ошибке "Недопустимая длина строки или буфера"
...
Рейтинг: 0 / 0
Медленная запись в DBF черзе OleDb
    #36781212
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдоволь намучившись "с записью в DBF файл" (перебрав 3-х или 4-х провайдеров) сформулировал и озвучил (руководству, заказчикам) "политическую формулу" - "старая технология (формат DBF) - неизбежные тормоза" (хотя, когда в доисторические времена программастал в фоксе, все летало неимоверно=))

рекомендую вывести проблему в "политическую плоскость" (один факт, что под х64 не существует, и уже наверное не будет существовать драйверов для дбф, дает право это делать)

требуйте XML (у меня, правда, не получилось - обмен данными с госструктурами - их ничем не проймешь )), но требование технически вполне обоснованно)
...
Рейтинг: 0 / 0
Медленная запись в DBF черзе OleDb
    #36781790
|\/|AX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR...требуйте XML...
Я бы наверно даже тему не заводил, если бы это было возможно )
Я решил проблему таким образом. В msaccess создал необходимые таблицы и функции. Там экспорт в dbf шустро проходит. А уже через interopservices вызываю функцию с параметрами в этой бд и все. 20-25 секунд = dbf (~150000 строк)
Может способ корявый, но работает.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Медленная запись в DBF черзе OleDb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]