Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Вставка нескольких записей в таблицу БД


Автор: DriveIS 5.8.2007, 07:02
Есть текстовый файл. Необходимо его построчно читать (строка файла соответствует строке таблицы) и, после считывания нескольких таких строк в какой-то буфер, послать запрос в БД на добавление этих нескольких считанных записей (БД - SQL Server). Есть ли такая возможность?
Если ставить вопрос более широко, то можно ли как-то оптимизировать чтение строк из файла и запись их в БД, возможно другими методами?

Автор: mr.DUDA 5.8.2007, 10:46
Можно при чтении файла наполнять датасет и сливать его в БД с пом. DataAdapter, метод Update.

Автор: DriveIS 5.8.2007, 14:00
Такое уже испытывалось. И производительность такого метода оказалась еще ниже... Если я все правильно делал.

Автор: mihryak 5.8.2007, 16:49
Если база позволяет (Access, например, нет), можно посылать на выполнение не по одному INSERT, а сразу по несколько штук, если ещё на каждую отправку окрывается и закрывается соединение (что, в общем-то, правильно и соответствует идеологии ADO.Net), то производительность может возрасти в несколько раз.
Ещё можно почитать про BULK INSERT, например, http://msdn2.microsoft.com/en-us/library/ms188365.aspx.

Автор: DriveIS 5.8.2007, 17:32
Попробовал послать несколько запросов:
INSERT INTO T1 VALUES (1)
INSERT INTO T1 VALUES (2)
....
.....
Все прошло нормально, все вставилось, БД - SQL SERVER 2000.
Но теперь другая проблема: когда я посылал запрос  на добавление одной записи и если в таблице уже была запись с таким же ключом, то эта запись игнорировалась с помощью исключения. А теперь я посылаю блок записей и как мне проигнорировать только ОДНУ запись, а не ВЕСЬ БЛОК? Это, видимо, нужно решать средствами SQL... А как?

Автор: mihryak 5.8.2007, 17:36
хм.. сделать ключ автоинкрементным и вообще его не выставлять?

Добавлено через 3 минуты и 5 секунд
вообще в корне неправильно предоставлять возможность изменения ключевого поля

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)