powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вставить в БД 2000 записей наилучшим образом?
31 сообщений из 31, показаны все 2 страниц
Как вставить в БД 2000 записей наилучшим образом?
    #32455298
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример:

Код: 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
Как вставить в БД 2000 записей наилучшим образом?
    #32455340
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А откуда данные берешь? Может DTS?

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

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


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как вставить в БД 2000 записей наилучшим образом?
    #32455425
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как вставить в БД 2000 записей наилучшим образом?
    #32455438
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DTS - Data Transformation Services.
А с чем это едят? Мне бы ссылочку какую, где про это чудо почитать можно...

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

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как вставить в БД 2000 записей наилучшим образом?
    #32455462
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ниччего не понимаю, теперь работает так и причём в десятки раз быстрее:
т.е. всего 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
Как вставить в БД 2000 записей наилучшим образом?
    #32455483
Bigheadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что непонятного то!? Соединение не "дергается" каждый раз! Вот и быстрее.
В любом случае вынос инвариантных операций из цикла ускоряет его выполнение за счет уменьшения операций внутри каждой итерации.
А уж тем более открытие/закрытие коннекта!
...
Рейтинг: 0 / 0
Как вставить в БД 2000 записей наилучшим образом?
    #32455498
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А средствАми C# мона ?!
Обьясни мне одну вещь: Зачем?

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


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

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


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

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

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

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как вставить в БД 2000 записей наилучшим образом?
    #32457926
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНиччего не понимаю, теперь работает так и причём в десятки раз быстрее:
т.е. всего 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
Как вставить в БД 2000 записей наилучшим образом?
    #32458095
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если prepare добавить? Я думаю секунды 2 будет.

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

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

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

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

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


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

Код: 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
Как вставить в БД 2000 записей наилучшим образом?
    #32458464
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Кстати, никто не делал/видел реализации коннекшион пул?
Вы наверное имеете ввиду настройку connection pool

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

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

[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
Как вставить в БД 2000 записей наилучшим образом?
    #32458633
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНадеюсь ты не собираешься вызывать ВэбСервис 2000 раз?

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

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

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

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


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

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

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

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

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

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



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

Я думаю что конечная цель M234 все таки вставить 2000 записей из своей системы, а не сгенерировать таблицу с 2000 строк. А пример он написал в качестве теста скорострельности insert.
...
Рейтинг: 0 / 0
Как вставить в БД 2000 записей наилучшим образом?
    #32459037
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я ведь в начале спрашивал: откуда данные?
Их ведь можно сборисить в базу разными спсобами. Он оветил что прям там и сочиняет. ИМХО самое место этому циклу в хранимке. Если честно то можно и без цикла, одним батчем, вообще летать будет.

Magnus
...
Рейтинг: 0 / 0
Как вставить в БД 2000 записей наилучшим образом?
    #32459085
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что конечная цель M234 все таки вставить 2000 записей из своей системы, а не сгенерировать таблицу с 2000 строк. А пример он написал в качестве теста скорострельности insert.

Да, в общем верно. Я конечно в цикле сам сочиняю, но цикл находится в моём приложении и на его месте могли бы быть (и будут) какие-либо данные из другого источника (другая БД наример). Данные передаются ВэбСервису, он их обрабатывает и вставляет в таблицу в БД на сервере или передаёт их ХП мне это всё равно, но с ХП это будет в этом случае невозможно если я на счёт массивов правильно понял. ВэбСервис лежит на томже сервере что и серверная БД, поэтому разговаривать о скорости тут можно только условно.

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

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

Не совсем понял, поясните пожалуйста на примере.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как вставить в БД 2000 записей наилучшим образом?
    #32459280
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал тут целую поэму а тут куча вирусов, весь офис завалился. Еле отбились :)
Коротко:
Если сервис занят чем то вроде статистической обработки(или любой другой) без представления данных пользователю то иммет смысл перенести всю обработку на сервер. Это типично серверная задача, каждый должен заниматся тен что у него получается лучше всего. И бизнес рулз, в такок случае должны быть на сервере. Сервис только вызывать будет: Сделай то, посчитай это. И получать ответы : Success/Fail.

Т.е. вданном случае, сервис вызывает хранимку, она берет данные из базы , проводит все необходимые манипуляции и заливает обратно(или в другую базу) возвращая сервису только флаг о выполнении. Ну и может кое какие результаты необходимые для принятия последующих решений.



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


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