Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как быстро и правильно залить данные в DBF? / 8 сообщений из 8, страница 1 из 1
31.01.2005, 12:25
    #32892039
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
Есть необходимость слить определенные массивы в 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
31.01.2005, 13:08
    #32892196
Mykola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
а может есть возможность попробовать: output to or unload .... to
...
Рейтинг: 0 / 0
31.01.2005, 13:16
    #32892235
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
Mykolaа может есть возможность попробовать: output to or unload .... to
Можно поподробнее?
Что это за зверь и где его искать?
Чье это свойство?
...
Рейтинг: 0 / 0
31.01.2005, 13:24
    #32892266
Bigheadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
Столкнулся недавно с такой же проблемой. Но более глобально. Использую драйвер Microsoft.Jet.OLEDB.4.0 для доступа к дбв, Excel, текстовым файлам. Во всех трех случаях аналогичные тормоза при записи во внешние источники.
Т.ч. подозреваю, что проблема именно в драйвере.
...
Рейтинг: 0 / 0
31.01.2005, 13:47
    #32892357
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
Ну я ведь не настаиваю на использовании драйвера...
Можно конечно в лобовую писать DBF как файл, но хотелось обойтись меньшей кровью...
...
Рейтинг: 0 / 0
31.01.2005, 14:56
    #32892588
Bigheadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
В принципе можно поискать 3rd party драйверы для дбф. Уверен, что такие существуют. Хотя, возможно, и не бесплатные.
В моем же случае нужно иметь максимально унифицированный доступ к внешним источникам. Поэтому пока использую этот драйвер, мирясь с его производительностью. Хотя есть подозрения, что тормоза начались либо от COM Interop, либо от какого-нибудь хотфикса на windows/office/т.п.
...
Рейтинг: 0 / 0
31.01.2005, 16:46
    #32892920
Mykola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
view t-sql
example:
select * from info.tbl_bonys_malys ; output to d:\a1.dbf format dbaseIII
...
Рейтинг: 0 / 0
31.01.2005, 20:34
    #32893412
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быстро и правильно залить данные в DBF?
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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как быстро и правильно залить данные в DBF? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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