|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Суть - есть директория, по которой в цикле пробегаюсь по всем файлам Excel Затем так же в цикле пробегаюсь по всем Листам файла и делаю некую обработку Затем я хочу удалить отработанный файл. Но он блокируется процессом (цикл по листам) и не удаляется. Даже если файлов несколько, то все одно они ВСЕ остаются заблокированными (иногда, правда один или два все же удаляются - рандомно) Пробовал рвать соединение CurrConnDotNet в скрипте: Код: c# 1. 2. 3.
не помогает. Делал паузу, выжидал - без толку. Если убрать цикл по листам - все удаляется.... На картинке тестовый вариант. Скрипт SQL - просто задержка в 1 сек для видимости работы. Удалять в другом месте - не вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 16:12 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL, Цикл как реализован - For Loop Component, или прямо в C# коде обычный foreach? Первый может удерживать блокировки, наверное. Я бы кэшировал список файлов в отдельный List<Whatever> и потом уже по нему шел бы и удалял. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 16:47 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Ennor Tiegael, загружал картинку - не появилась... цикл - For Loop Component неужели нельзя как то "отвязать" файл после того как цикл по листам закончен? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 16:51 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL, Как вариант, можно закэшировать список файлов в переменную уровня пакета (Recordset, что ли. Саму переменную нужно объявлять как System.Object) и потом циклом идти по этой переменной, а не по реальным файлам на диске. Только... идея с удалением имхо фундаментально порочна. Если в вашем коде где-то будут ошибки, вы не сможете запроцессить файлы заново, они же удалены. Придется заново доставать их там, откуда вы их брали, это может быть не всегда возможно. Я в такой ситуации сохранял отметку об успешном процессинге файла в таблице БД, после чего писал отдельный код, который шел по выборке из этой таблицы и перемещал файлы в архивную подпапку. Ее уже можно будет чистить отдельным процессом, например удалять файлы, если есть новая версия оного, которая была успешно загружена. Примерно как с бэкапами баз, тот же принцип. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 07:38 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Ennor Tiegael Только... идея с удалением имхо фундаментально порочна. Если в вашем коде где-то будут ошибки, вы не сможете запроцессить файлы заново, они же удалены. Придется заново доставать их там, откуда вы их брали, это может быть не всегда возможно. Я в такой ситуации сохранял отметку об успешном процессинге файла в таблице БД, после чего писал отдельный код, который шел по выборке из этой таблицы и перемещал файлы в архивную подпапку. И вопрос всё равно остаётся - как переместить файлы в архивную подпапку, если они заблокированы? Такое бывает, наверное, нужно смотреть, какие там коннекты к файлам, может, сделалась копия коннекта, или есть какие то ссылки, которые нескоро удалятся сборщиком мусора... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 10:28 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
alexeyvg Ennor Tiegael Только... идея с удалением имхо фундаментально порочна. Если в вашем коде где-то будут ошибки, вы не сможете запроцессить файлы заново, они же удалены. Придется заново доставать их там, откуда вы их брали, это может быть не всегда возможно. Я в такой ситуации сохранял отметку об успешном процессинге файла в таблице БД, после чего писал отдельный код, который шел по выборке из этой таблицы и перемещал файлы в архивную подпапку. И вопрос всё равно остаётся - как переместить файлы в архивную подпапку, если они заблокированы? Такое бывает, наверное, нужно смотреть, какие там коннекты к файлам, может, сделалась копия коннекта, или есть какие то ссылки, которые нескоро удалятся сборщиком мусора... Так что нужно смотреть свой код, где то там остались ссылки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 11:33 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
alexeyvg, так в том то и дело - своего кода нет совсем . просто цикл For Loop Component по файлам в паке, в нем еще один For Loop Component по листам файла и после него попытка удалить файл стандартными средствами Задача Фаловой Системы. Примитивная задача, которая не работает. Видимо я сам не смогу повлиять на сборщик мусор и тп зашитый в продукт Microsoft. На ум приходит сделать некую папку в которую сначала Перемещать файлы, затем в цикле по файлам его сначала переименовывать (например добавлять к имени "tmp_" и тп) и уже с ним работать не удаляя в данной задаче совсем. А каждая следующая задача будет сначала пытаться очистить эту папку и потом работать далее... P.S. Сегодня рисунок прикрепился... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 13:37 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL, Попробуйте цикл по листам сделать в скрипт-компоненте ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 14:02 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL так в том то и дело - своего кода нет совсем . Что за установка соединения? И как вы получаете данные из этих Excel-файлов, из листов? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 18:00 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL в нем еще один For Loop Component по листам файла Вы рассказываете про свой код, и при этом пишете, что "своего кода нет совсем"... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 18:03 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
alexeyvg Oleg_SQL в нем еще один For Loop Component по листам файла Вы рассказываете про свой код, и при этом пишете, что "своего кода нет совсем"... Первый скрипт пустой (не убрал его перед снимком). Второй просто назначает соединение для каждого файла: Код: c# 1. 2. 3. 4. 5. 6. 7.
Задача SQL - просто Код: sql 1.
Третий скрипт - моя попытка удалить файл "руками". Но стандартная "Файловая система" на удаление - то же самая ошибка блокировки ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 18:52 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL Второй просто назначает соединение для каждого файла: ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 22:36 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
alexeyvg, Чисто логически рассуждая - тогда автору топика нужно будет удалять отработанный файл после перехода на следующий. Ну и в конце все равно пакет упадет. Я бы бегал по листам в скрипт-компоненте, там можно самому управлять открытием-закрытием и удалением. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 00:35 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Критик Чисто логически рассуждая - тогда автору топика нужно будет удалять отработанный файл после перехода на следующий. Ну и в конце все равно пакет упадет. Но зависит от того, что там делается дальше, потому что этот "цикл по листам" тоже очень загадочная штука, что там, непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 01:02 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL alexeyvg, так в том то и дело - своего кода нет совсем . просто цикл For Loop Component по файлам в паке, в нем еще один For Loop Component по листам файла и после него попытка удалить файл стандартными средствами Задача Фаловой Системы. Примитивная задача, которая не работает. Видимо я сам не смогу повлиять на сборщик мусор и тп зашитый в продукт Microsoft. На ум приходит сделать некую папку в которую сначала Перемещать файлы, затем в цикле по файлам его сначала переименовывать (например добавлять к имени "tmp_" и тп) и уже с ним работать не удаляя в данной задаче совсем. А каждая следующая задача будет сначала пытаться очистить эту папку и потом работать далее... P.S. Сегодня рисунок прикрепился... У меня сделано так Сначала в скрипт таске получаем названия листов Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
И потов в цикле бежим уже по [ User::ExcelSheetsCollection Все работает. В комментарии к пакету написано: авторЕсли делать перебор листов в непосредственно в Foreach Loop Container, то при выходе из него подключение к Excel не закрывается, и файл остаётся блокированным. Его не удаётся удалить впоследствии. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 08:13 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Критик alexeyvg, Чисто логически рассуждая - тогда автору топика нужно будет удалять отработанный файл после перехода на следующий. Ну и в конце все равно пакет упадет... В том то и дело, что файл остается заблокированным все время выполнения пакета. Т.е. блокируются все файлы по мере начала цикла по листам (Excel) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 09:03 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
HandKot У меня сделано так Сначала в скрипт таске получаем названия листов Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
И потов в цикле бежим уже по [ User::ExcelSheetsCollection Все работает. В комментарии к пакету написано: авторЕсли делать перебор листов в непосредственно в Foreach Loop Container, то при выходе из него подключение к Excel не закрывается, и файл остаётся блокированным. Его не удаётся удалить впоследствии. Спасибо, попробую так. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 09:09 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL, Я всегда читаю Excel через OpenXml. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 09:12 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
Oleg_SQL, а как Вы закрываете Excel после просмотра страниц документа или закрываете сам документ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 12:07 |
|
Помогите с dtsx-пакетом
|
|||
---|---|---|---|
#18+
HandKot Код: c# 1.
HandKot И потов в цикле бежим уже по [ User::ExcelSheetsCollection Очевидно же, что где то "в цикле бежим" создаются коннекты, которые и держат. PS Вы тут не услышите про волшебную кнопку "что бы было правильно". Что бы найти ошибку в коде, нужно видеть код. Или вы должны сами локализовать место, которое держит коннект (тогда никакого другого кода в пакете быть не должно), или нужно показать больше кода. Вы сами выяснили, что объект коннекта в DTS эксельные файлы не держит, значит, его держит какой то другой код. Вот, и нужно его найти. UPD Ой, думал, это код ТС, а потом эти коллекции объектов где то используются в пакете. По любому, нужно больше кода, что бы разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 12:20 |
|
|
start [/forum/topic.php?fid=46&msg=39946344&tid=1686232]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 157ms |
0 / 0 |