powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как быстро и правильно залить данные в DBF?
8 сообщений из 8, страница 1 из 1
Как быстро и правильно залить данные в DBF?
    #32892039
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть необходимость слить определенные массивы в DBF (dBase III).
Данные заливаются, но уж слишком долго...
Пробовал и по одной записи типа Insert into ...
Понадеялся, что ч/з адаптер будет лучше.
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
private void button7_Click(object sender, System.EventArgs e)
{
	string path=@"C:\Temp\";
	string table="Tbl.dbf";

	string ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\""+path+"\";Extended Properties=\"dBase III\"";
	OleDbConnection	cn=new OleDbConnection(ConnectionString);
	cn.Open();
	OleDbCommand	cmd=new OleDbCommand("CREATE TABLE "+table+"(QQQ int , fff int)", cn);
	cmd.ExecuteNonQuery();

	cmd.CommandText = "select * from " + table;

	OleDbDataAdapter sda = new OleDbDataAdapter(cmd);
	DataTable tbl = new DataTable();
	sda.Fill(tbl);

	DataRow dr;
	for (int i = 0; i < 2000; i++)
	{
		dr = tbl.NewRow();
		dr[0] = i;
		dr[1] = i.ToString();
		tbl.Rows.Add(dr);
	}
	OleDbCommandBuilder builder = new OleDbCommandBuilder (sda);

	DateTime ttt = DateTime.Now;
	sda.Update(tbl);
	MessageBox.Show((DateTime.Now - ttt).ToString());

	cn.Close(); 
}
Добавление всего 2000 строк, а точнее sda.Update(tbl); занимает 53 сек.
Как ускорить?
Желательно раз в 50 - 53...
...
Рейтинг: 0 / 0
Как быстро и правильно залить данные в DBF?
    #32892196
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может есть возможность попробовать: output to or unload .... to
...
Рейтинг: 0 / 0
Как быстро и правильно залить данные в DBF?
    #32892235
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mykolaа может есть возможность попробовать: output to or unload .... to
Можно поподробнее?
Что это за зверь и где его искать?
Чье это свойство?
...
Рейтинг: 0 / 0
Как быстро и правильно залить данные в DBF?
    #32892266
Bigheadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся недавно с такой же проблемой. Но более глобально. Использую драйвер Microsoft.Jet.OLEDB.4.0 для доступа к дбв, Excel, текстовым файлам. Во всех трех случаях аналогичные тормоза при записи во внешние источники.
Т.ч. подозреваю, что проблема именно в драйвере.
...
Рейтинг: 0 / 0
Как быстро и правильно залить данные в DBF?
    #32892357
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я ведь не настаиваю на использовании драйвера...
Можно конечно в лобовую писать DBF как файл, но хотелось обойтись меньшей кровью...
...
Рейтинг: 0 / 0
Как быстро и правильно залить данные в DBF?
    #32892588
Bigheadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе можно поискать 3rd party драйверы для дбф. Уверен, что такие существуют. Хотя, возможно, и не бесплатные.
В моем же случае нужно иметь максимально унифицированный доступ к внешним источникам. Поэтому пока использую этот драйвер, мирясь с его производительностью. Хотя есть подозрения, что тормоза начались либо от COM Interop, либо от какого-нибудь хотфикса на windows/office/т.п.
...
Рейтинг: 0 / 0
Как быстро и правильно залить данные в DBF?
    #32892920
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
view t-sql
example:
select * from info.tbl_bonys_malys ; output to d:\a1.dbf format dbaseIII
...
Рейтинг: 0 / 0
Как быстро и правильно залить данные в DBF?
    #32893412
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AstakhovЕсть необходимость слить определенные массивы в DBF (dBase III).
Данные заливаются, но уж слишком долго...
Пробовал и по одной записи типа Insert into ...
[skip]
Добавление всего 2000 строк, а точнее sda.Update(tbl); занимает 53 сек.
Как ускорить?
Желательно раз в 50 - 53...

Скорее всего проблема в использовании клиентского курсора вместо серверного. Параметр командной строки мне не известен, потому пришлось писать на ADODB:
Не знаю насчет 50 - 53 раз, но побыстрее на порядок точно будет ( для сравнения можешь поменять тип курсора на adUseClient и получить точно такой же тормоз как и в твоем примере):

Код: 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.
26.
27.
28.
29.
30.
31.
using ADODB;

/// ...

string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\temp;Extended Properties=dBase III;";

ADODB.Connection connection = new ADODB.ConnectionClass();
connection.Open( ConnectionString, null, null, 0 );

object affected;
connection.Execute("create table Tbl.dbf ( QQQ int, fff int)", out affected, 0 );

connection.CursorLocation = ADODB.CursorLocationEnum.adUseServer;

ADODB.Recordset rs = new ADODB.RecordsetClass();
rs.Open( "Tbl.dbf", connection, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, 0 );

DateTime ttt = DateTime.Now;

for ( int i = 0; i < 2000; i++ )
{
  rs.AddNew( "QQQ", i );
  rs.Update( "fff", i );
}

Debug.WriteLine((DateTime.Now - ttt).ToString());

connection.Close();

/// ...


--
WBR, Roman S. Golubin
ICQ UIN: 63253392
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как быстро и правильно залить данные в DBF?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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