Исключение было выдано целью вызова - Ошибка задачи сценария служб SSIS
У меня есть следующая задача сценария, использующая C# для обновления сводной таблицы в Excel в пакете служб SSIS. Пакет хорошо работает в Visual Studio, а также в утилите пакетов. Но когда я развернул этот пакет в каталоге служб SSIS и запланировал задание агента SQL Server, в части задачи сценария произошел сбой с очень общим сообщением об ошибке
Exception has been thrown by the target of an invocation
Я исследовал несколько других вопросов и ответов, но наши ситуации сильно различаются.
Мой код задачи скрипта
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
#endregion
namespace ST_0126969a11e546b3bbde047669039ab5
{
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
public void Main()
{
//Dts.TaskResult = (int)ScriptResults.Success;
ExcelRefresh(@"C:\\SSIS\\MTD.xlsx");
}
private void ExcelRefresh(string Filename)
{
object NullValue = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.DisplayAlerts = false;
Microsoft.Office.Interop.Excel.Workbook Workbook = excelApp.Workbooks.Open(
Filename, NullValue, NullValue, NullValue, NullValue,
NullValue, NullValue, NullValue, NullValue, NullValue,
NullValue, NullValue, NullValue, NullValue, NullValue);
Workbook.RefreshAll();
Workbook.Save();
//Workbook.SaveAs(DestinationPath, NullValue, NullValue, NullValue, NullValue,
// NullValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
//NullValue, NullValue, NullValue, NullValue, NullValue);
Workbook.Close(false, Filename, null);
excelApp.Quit();
Workbook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
}
}
}
Пожалуйста помоги.
2 ответа
«Исключение было вызвано целью вызова» — это общее исключение, создаваемое задачей «Сценарий» при возникновении ошибки. Чтобы прочитать настоящее сообщение об ошибке, вы можете добавить в свой код блок try, catch, как описано в следующей статье:
Глядя на ваш код, похоже, что ошибка возникает по одной из следующих причин:
- На сервере отсутствуют сборки Microsoft Office Interop (офис не установлен)
- Неверный путь к файлу Excel
Вариант A - Microsoft Office не был установлен на сервере. Техническим ответом является "установка и лицензирование Office", но это, как правило, не очень хорошая вещь, как я упоминаю здесь /questions/35687560/microsoft-excel-ne-mozhet-poluchit-dostup-k-fajlu-v-windows-server-2012/35687569#35687569
Вариант B - Office установлен, но вы выполняете пакет служб SSIS с иной скоростью, чем установленная версия. Если вы установили 32-разрядную версию Office, которая используется по умолчанию, необходимо запустить пакет служб SSIS в аналогичном домене. Версией выполнения служб SSIS по умолчанию для блока SQL Server будет 64-разрядная, поэтому либо используйте 32-разрядную среду выполнения, либо повторите установку Office, чтобы соответствовать вызову по умолчанию. Также рассматривается в вышеупомянутом ответе
Вариант C - Разрешения. Имеет ли учетная запись, на которой выполняется пакет служб SSIS, доступ к файловой системе по адресу C:\SSIS\ Имеет ли учетная запись разрешение на запись для этого расположения?
Вариант D - Существует ли местоположение и файл?
Вариант E - проверяет ли учетная запись, выполняющая пакет, бит InteractWithDesktop в активном каталоге - при условии, что это учетная запись службы
Вариант F - Используете ли вы ту же версию SSIS на сервере, на которой вы разработали?
Вариант G - На самом деле все работает нормально, но, поскольку вы закомментировали код возврата в Main, задача не выполняется.
Это мои главные мысли о том, куда это пошло.