Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вставить в БД 2000 записей наилучшим образом? / 25 сообщений из 31, страница 1 из 2
24.03.2004, 16:33
    #32455298
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
Пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int Value2= 0 ;
int i;
for (i= 0 ;i< 2000 ;i++)
{
oleDbDataAdapter1.InsertCommand.CommandText= "INSERT INTO Table1(Field1, Field2) VALUES ('Value1',"  + id +  " ) " ;
oleDbConnection1.Open();
oleDbDataAdapter1.InsertCommand.ExecuteNonQuery();
oleDbConnection1.Close();
id++;
}


Это работает конечно, но мне не нравятся эти дёрганья oleDbConnection1.Open(); oleDbConnection1.Close();

Нельзя ли как-нить соединение открыть, все операции провести и только потом закрыть?


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
24.03.2004, 16:47
    #32455340
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
А откуда данные берешь? Может DTS?

Magnus
...
Рейтинг: 0 / 0
24.03.2004, 17:00
    #32455383
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
Может DTS?
Кто такой?

А откуда данные берешь?
Разве из кода не видно? Сам сочиняю в цикле :)


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
24.03.2004, 17:20
    #32455425
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
DTS - Data Transformation Services.
я думал тебе откуда перетащить нужно.
А такое сочинение лучше прямо в хранимке писать.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @a int
set @a= 0 
create table #test(a int)
while @a< 2004 
begin
	set @a=@a+ 1 
	insert into #test(a) values(@a) 
	if @a= 2000  break
end

select * from #test
drop table #test


Magnus
...
Рейтинг: 0 / 0
24.03.2004, 17:26
    #32455438
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
DTS - Data Transformation Services.
А с чем это едят? Мне бы ссылочку какую, где про это чудо почитать можно...

А такое сочинение лучше прямо в хранимке писать.
А средствАми C# мона ?!

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
24.03.2004, 17:36
    #32455462
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
Ниччего не понимаю, теперь работает так и причём в десятки раз быстрее:
т.е. всего 10 секунд вместо 2.5 минут (!).
Просто вынес из цикла открытие и закрытие соединения.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int Value2= 0 ;
int i;
oleDbConnection1.Open();
for (i= 0 ;i< 2000 ;i++)
{
oleDbDataAdapter1.InsertCommand.CommandText= "INSERT INTO Table1(Field1, Field2) VALUES ('Value1',"  + id +  " ) " ;
oleDbDataAdapter1.InsertCommand.ExecuteNonQuery();
id++;
}
oleDbConnection1.Close();


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
24.03.2004, 17:46
    #32455483
Bigheadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
А что непонятного то!? Соединение не "дергается" каждый раз! Вот и быстрее.
В любом случае вынос инвариантных операций из цикла ускоряет его выполнение за счет уменьшения операций внутри каждой итерации.
А уж тем более открытие/закрытие коннекта!
...
Рейтинг: 0 / 0
24.03.2004, 17:50
    #32455498
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
А средствАми C# мона ?!
Обьясни мне одну вещь: Зачем?

Если тебе нужно заполнить таблицу подобными данными, то сам сервер БД это по определению сделает быстрее. На то он и сервер.


Magnus
...
Рейтинг: 0 / 0
24.03.2004, 18:08
    #32455546
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
А что непонятного то!?
Непонятно чего енто раньше не работало, прежде чем сюда писать я именно этот вариант пробовал.... ну да ладно, мож где не туда нажал...уже не важно.

Обьясни мне одну вещь: Зачем?
Есть ВэбСервис который работает с БД и он написан на Сишарп.
Спрошу подругому: Как мне вызать эту ХП из ВэбСервиса?
Код на Сишарп можете дать?


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
24.03.2004, 18:13
    #32455552
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
...
Рейтинг: 0 / 0
24.03.2004, 18:16
    #32455563
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
Спасибо.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
25.03.2004, 07:23
    #32455986
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
2 M234

Если бы сразу же написал: "Вот пример, используется база данных Access". Половина бы постов здесь не было, ведь это sql.ru здесь народ сразу же думает что стоит MS SQL даже не обращая внимания на OleDb провайдер (хотя и им тоже можно к MS SQL коннектиться но все таки)
...
Рейтинг: 0 / 0
25.03.2004, 10:14
    #32456149
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
2 Sa
Ок. Замечания учту. Я думаю, что в моём случае на сервере будет стоять MS SQL, а на клиентах Ацесс, так что все ответы мне полезны в той или иной степени.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
26.03.2004, 09:28
    #32457926
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
авторНиччего не понимаю, теперь работает так и причём в десятки раз быстрее:
т.е. всего 10 секунд вместо 2.5 минут (!).

А если prepare добавить? Я думаю секунды 2 будет.

int Value2=0;
int i;
oleDbConnection1.Open();
oleDbDataAdapter1.InsertCommand.CommandText="INSERT INTO Table1(Field1, Field2) VALUES (?,?)";
oleDbDataAdapter1.InsertCommand.Parameters.Add("Par1", OledbType.VarChar);
oleDbDataAdapter1.InsertCommand.Parameters.Add("Par2", OledbType.Int);
oleDbDataAdapter1.InsertCommand.Prepare;

for (i=0;i<2000;i++)
{
oleDbDataAdapter1.InsertCommand.Parameters[0].Value = "Value1";
oleDbDataAdapter1.InsertCommand.Parameters[1].Value = id;
oleDbDataAdapter1.InsertCommand.ExecuteNonQuery();
id++;
}
oleDbConnection1.Close();
...
Рейтинг: 0 / 0
26.03.2004, 11:06
    #32458095
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
А если prepare добавить? Я думаю секунды 2 будет.

Точно! Проверил на 10000 записей разница между "с prepare" и "без оного" составила 21 секунду (26 и 47 секунд соответственно)

Спасибо большое за оптимизацию процесса !

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
26.03.2004, 11:15
    #32458122
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
авторЕсть ВэбСервис который работает с БД и он написан на Сишарп.

авторТочно! Проверил на 10000 записей разница между "с prepare" и "без оного" составила 21 секунду (26 и 47 секунд соответственно)

Надеюсь ты не собираешься вызывать ВэбСервис 2000 раз?


Кстати, никто не делал/видел реализации коннекшион пул? Что бы на каждый вызов вебсервиса не открывать/закрывать коннект. Похоже у меня теряется на этом 500-600 млсек, а Субд сей финт не умеет. Я Использую System.Data.Odbc классы.
...
Рейтинг: 0 / 0
26.03.2004, 12:15
    #32458241
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
А если попробовать написать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[WebMethod]
public void DBCloseConn()
{
if (oleDbConnection1.State.ToString().ToUpper()== "OPEN" )
{
	oleDbConnection1.Close();
}
}

[WebMethod]
public void DBOpenConn()
{
if (oleDbConnection1.State.ToString().ToUpper()== "CLOSED" )
{
	oleDbConnection1.Open();
}
}


А потом из клиента вызывать их. Так можно наверно коннект держать открытым до момента его явного закрытия, хотя это теория, ещё не пробовал пока.
Попробую - скажу результат.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
26.03.2004, 13:33
    #32458464
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
>Кстати, никто не делал/видел реализации коннекшион пул?
Вы наверное имеете ввиду настройку connection pool

Посмотрите:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmdac/html/pooling2.asp
...
Рейтинг: 0 / 0
26.03.2004, 14:10
    #32458573
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
автор>Кстати, никто не делал/видел реализации коннекшион пул?
Вы наверное имеете ввиду настройку connection pool
Ага.

авторПосмотрите:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmdac/html/pooling2.asp
Спасибо, посмотрю.
...
Рейтинг: 0 / 0
26.03.2004, 14:19
    #32458606
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
авторА если попробовать написать так:

[WebMethod]
public void DBCloseConn()
{
if (oleDbConnection1.State.ToString().ToUpper()=="OPEN")
{
oleDbConnection1.Close();
}
}

[WebMethod]
public void DBOpenConn()
{
if (oleDbConnection1.State.ToString().ToUpper()=="CLOSED")
{
oleDbConnection1.Open();
}
}

А потом из клиента вызывать их. Так можно наверно коннект держать открытым до момента его явного закрытия, хотя это теория, ещё не пробовал пока.
Попробую - скажу результат.


Я конечно не очень копенгаген, но у меня есть ощущение oleDbConnection1 существует только внутри [WebMethod]. Т.е. если откроешь oleDbConnection1 из одного WebMethod, в другом WebMethod, его (oleDbConnection1) не будет.

Можно конечно сохранить его в Session, но тогда и методы д.б. [WebMethod (Description="", EnableSession= true )]
...
Рейтинг: 0 / 0
26.03.2004, 14:24
    #32458633
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
авторНадеюсь ты не собираешься вызывать ВэбСервис 2000 раз?

В общем я хотел намекнуть, что вызов ВэбСервиса довольно дорогая операция, и имеет смысл создать ВэбСервиса, принимающий в качестве параметра XmlNode, или массив твоих объектов. И уже внутри ВэбСервиса выполнить инсерты в цикле сделав prepare.
...
Рейтинг: 0 / 0
26.03.2004, 14:51
    #32458707
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
....и имеет смысл создать ВэбСервиса, принимающий в качестве параметра XmlNode, или массив твоих объектов. И уже внутри ВэбСервиса выполнить инсерты в цикле сделав prepare.

Есссесно. Обижаете коллега....

Я конечно не очень копенгаген, но у меня есть ощущение oleDbConnection1 существует только внутри [WebMethod]. Т.е. если откроешь oleDbConnection1 из одного WebMethod, в другом WebMethod, его (oleDbConnection1) не будет.

Угу. Так и есть, но мы его еще покрутим.... :))


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
26.03.2004, 16:10
    #32458891
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
А с хранимкой таки быстрее будет :)

Вставка 2К записей для сервера - полпинка.
В данном варинте мы имеем 2000 обращений к серверу. Улавливаете разницу?
:)

Естественно если все таки будет сиквел.

Magnus
...
Рейтинг: 0 / 0
26.03.2004, 16:19
    #32458910
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
авторА с хранимкой таки быстрее будет :)

Вставка 2К записей для сервера - полпинка.
В данном варинте мы имеем 2000 обращений к серверу. Улавливаете разницу?
:)

Я не в курсе, а что можно в хранимку передать массив?
...
Рейтинг: 0 / 0
26.03.2004, 16:39
    #32458965
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в БД 2000 записей наилучшим образом?
Массив - нет. А зачем?
Я же вверху привел небольшой пример. Кривоват конечно, но это общая идея.
Если угодно, можно передать границы и по ним заполнять.



Magnus
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вставить в БД 2000 записей наилучшим образом? / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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