powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема с заполнением DataTable
3 сообщений из 3, страница 1 из 1
Проблема с заполнением DataTable
    #33926167
User123456789
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

База: Oracle 8, Visual Studio 2005, FrameWork 2.0
Проблема в функции импорта свежих данных в базу.

В базе лежит таблица с поставщиками и таблица поставляемых ими изделий. Для каждого изделия сохраняется ID поставщика.
Поставщики сбрасывают нам свои прайс-листы...
Тоесть, каждый раз при импорте обновляем изделия, связанные с определённым поставщиком.

Алгоритм работы такой:
1. Отбираем ВСЕ изделия данного поставщика и помечаем эти данные как устаревшие.
2. Ищем и актуализируем или добавляем изделия... Изменённые записи помечаем как актуальные...

Всё работает нормально если в базе для поставщика сохранено не очень много изделий.
НО для некоторых особенно толстых поставщиков в базе хранятся порядка 40 - 50 ТЫСЯЧ изделий. При попытке импорта для такого поставщика программа виснет на том месте, где я пытаюсь заливать DataSet.

Вот код:

Dim myOleDbDataAdapterImport As New OleDb.OleDbDataAdapter()
myOleDbDataAdapterImport.SelectCommand = ............
myOleDbDataAdapterImport.InsertCommand = ............
myOleDbDataAdapterImport.UpdateCommand = ..............

Dim myDataSetImport As New DataSet()
Dim myDataTableImport As New DataTable()

myOleDbDataAdapterImport.Fill(myDataSetImport, "TblImport") ' <<<--- ВИСНЕТ ЗДЕСЬ!
myDataTableImport = myDataSetImport.Tables.Item("TblImport")
.....


Братцы, чего посоветуете?
В чем причина, как побороть?
...
Рейтинг: 0 / 0
Проблема с заполнением DataTable
    #33926243
Bigheadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит виснет? Метод Fill работает очень долго? Но он все-таки завершается когда-нибудь?
Советую использовать не OleDbConnection, а ODP.NET (Oracle Data Provider for .NET). Недавно вышла новая версия, заточенная под .NET 2.0.
...
Рейтинг: 0 / 0
Проблема с заполнением DataTable
    #33928128
User123456789
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С причиной, вроде разобрался.
Перед заполнением DataTable я начинаю большую длинную транзакцию, и все описанные в первом посте манипуляции провожу в ней:

transactionImport = connectionTransaction.BeginTransaction()
Try
myOleDbDataAdapterImport.SelectCommand.Transaction = transactionImport
myOleDbDataAdapterImport.InsertCommand.Transaction = transactionImport
myOleDbDataAdapterImport.UpdateCommand.Transaction = transactionImport

myOleDbDataAdapterImport.Fill(myDataSetImport, "TblImport") <<<--- ВИСНЕТ ЗДЕСЬ!!!
myDataTableImport = myDataSetImport.Tables.Item("TblImport")
.......................


Когда записей заливается мало - откатного буфера Оракловского хватает, и всё работает. А вот когда записей 40 тысяч -- буфер переполняется, и всё накрывается медным тазиком...

ВОПРОС:
Как бы красиво всё переделать, ведь используя транзакцию я добивался:
1. Блокировка записей на время проведения всего импорта
2. Возможность отката в случае ошибки.

Как бы по-полноценнее переделать?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема с заполнением DataTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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