|
|
|
Проблема с заполнением DataTable
|
|||
|---|---|---|---|
|
#18+
Привет всем! База: 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") ..... Братцы, чего посоветуете? В чем причина, как побороть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 19:48 |
|
||
|
Проблема с заполнением DataTable
|
|||
|---|---|---|---|
|
#18+
Что значит виснет? Метод Fill работает очень долго? Но он все-таки завершается когда-нибудь? Советую использовать не OleDbConnection, а ODP.NET (Oracle Data Provider for .NET). Недавно вышла новая версия, заточенная под .NET 2.0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 20:56 |
|
||
|
Проблема с заполнением DataTable
|
|||
|---|---|---|---|
|
#18+
С причиной, вроде разобрался. Перед заполнением 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. Возможность отката в случае ошибки. Как бы по-полноценнее переделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 13:48 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=105&tid=1353203]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 320ms |

| 0 / 0 |
