powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вставить в БД 2000 записей наилучшим образом?
25 сообщений из 31, страница 1 из 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
25 сообщений из 31, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вставить в БД 2000 записей наилучшим образом?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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