Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SSIS + C# = Error  [new]
Nikolayy
Member

Откуда:
Сообщений: 3
Здравствуйте.

Разрабатываю пакет выгрузки данных из экселей. На C# считываю имена полей таблицы из определенных ячеек, имя первой страницы и формирую запрос, который записываю в DTS переменную. Затем этот запрос выполняется для извлечения данных.

При запуске пакета на своей машине из SSIS все работает хорошо, все хорошо работает так же на продакшн сервере.
После развертывания пакета в SSISDB и запуске в качестве джоба выскакивает ошибка "Exception has been thrown by the target of an invocation.". Падает именно на Script task.

 public void Main()
                {
             // TODO: Add your code here
             string temp = "";
             Microsoft.Office.Interop.Excel.Application xlApp;

             temp = Dts.Variables["User::SourcePath"].Value.ToString();
             temp = temp.Replace(@"\", @"\\");

             string query = "";

             try
             {// Присоединение к открытому приложению Excel (если оно открыто)
                 xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
             }
             catch
             {
                 xlApp = new Excel.Application(); // Если нет открытого, то создаём новое приложение
             }

             Microsoft.Office.Interop.Excel.Workbook excelBook = xlApp.Workbooks.Open(temp);

             String[] excelSheets = new String[excelBook.Worksheets.Count];
             int i = 0;
             foreach (Microsoft.Office.Interop.Excel.Worksheet wSheet in excelBook.Worksheets)
             {
                 excelSheets[i] = wSheet.Name + "$";
                 i++;
             }

             // выбираем первый лист
             Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
             ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Sheets[1];

             // Формируем запрос
             query = "SELECT " 
                              + " [" + (string)(ObjWorkSheet.Cells[2, 2] as Excel.Range).Value + "]" + " AS [Код ЦОП], "
                              + " [" + (string)(ObjWorkSheet.Cells[2, 4] as Excel.Range).Value + "]" + " AS [Код проекта], "
                              + " [" + (string)(ObjWorkSheet.Cells[2, 5] as Excel.Range).Value + "]" + " AS [ПродуктSKU], "
                              + " [" + (string)(ObjWorkSheet.Cells[2, 7] as Excel.Range).Value + "]" + " AS [План IN], "
                              + " [" + (string)(ObjWorkSheet.Cells[2, 8] as Excel.Range).Value + "]" + " AS [План OUT] "
                              + " FROM  [" + excelSheets[0] + "A2:L]";

             // Записываем в переменные SSIS
             Dts.Variables["User::newQuery"].Value = query;
             Dts.Variables["User::qtyOfSheets"].Value = excelSheets.Length;

             excelBook.Close();
             xlApp.Quit();

         }

Может, кто-то тоже сталкивался с подобным поведением пакета и знает в чем проблема?
8 апр 17, 02:06    [20379926]     Ответить | Цитировать Сообщить модератору
 Re: SSIS + C# = Error  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
Если задействован C#, который всё равно открывает этот excel-файл, то почему бы тут же сразу и не прочитать его без вызова SSIS-пакета? Как-то так. И данные из DbDataReader сразу залить на сервер через SqlBulkCopy.
8 апр 17, 05:47    [20379977]     Ответить | Цитировать Сообщить модератору
 Re: SSIS + C# = Error  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5122
Nikolayy
При запуске пакета на своей машине из SSIS все работает хорошо, все хорошо работает так же на продакшн сервере.
После развертывания пакета в SSISDB и запуске в качестве джоба выскакивает ошибка
при запуске из джоба пакет стартует от учётки службы сиквел агента. посмотрите, что пишет ссис в свои логи.
8 апр 17, 11:26    [20380190]     Ответить | Цитировать Сообщить модератору
 Re: SSIS + C# = Error  [new]
Nikolayy
Member

Откуда:
Сообщений: 3
Сон Веры Павловны,
хорошая идея, благодарю. В понедельник попробую
8 апр 17, 15:49    [20380586]     Ответить | Цитировать Сообщить модератору
 Re: SSIS + C# = Error  [new]
Nikolayy
Member

Откуда:
Сообщений: 3
Дедушка,
если я смотрю отчет о выполнении джоба reprots -> all executions , то это не тоже самое, что и логи ssisdb посмотреть?
8 апр 17, 15:53    [20380595]     Ответить | Цитировать Сообщить модератору
 Re: SSIS + C# = Error  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5122
Nikolayy
reprots -> all executions
этого достаточно, если в отчёте не понятно в чём конкретно проблема (а отличия у вас как уже писал только в учётке запуска), то добавьте в сам скрипт запись трейса
например так или просто в текстовый файл.
8 апр 17, 23:51    [20381505]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить