Как преобразовать ComObject в тип данных SSIS ExecutePackageTask, используя SSIS API? - PullRequest
0 голосов
/ 03 января 2019

У меня есть пакет служб SSIS, содержащий элемент «ExecutePackageTask» на главной вкладке «Поток данных» пакета.Я пытаюсь использовать API служб SSIS для подготовки информации в пакете, и у меня возникла проблема, из-за которой я не могу преобразовать Task.InnerObject пакета из типа _COMObject в конкретный тип.

Я установилссылка на следующую dll

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ CommonExtensions \ Microsoft \ SSIS \ 140 \ Binn \ Microsoft.SqlServer.ExecPackageTaskWrap.dll

, для которого определен тип ExecutePackageTaskClass.

if (taskHost.InnerObject is ExecutePackageTaskClass ||
    taskHost.InnerObject is ExecutePackageTask ||
    taskHost is IDTSExecutePackage100)
                        {
    //Never enters this block because it doesn't identify the type of the __Combject
    //However, if I force the execution down this path the properties on the object appear to match that of the ExecutePackageTaskClass
    foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(taskHost.InnerObject))
    {
        Console.WriteLine(prop.Name);
    }
}

Вот как выглядит XML объекта в файле DTSX с помощью блокнота:

 <DTS:Executables>
    <DTS:Executable
      DTS:refId="Package\Call SplitPackageAny"
      DTS:ExecutableType="SSIS.ExecutePackageTask.3"
      DTS:TaskContact="Microsoft Corporation; Microsoft SQL Server v10; (C) 2007 Microsoft Corporation; All Rights Reserved;http://www.microsoft.com/sql/support/default.asp;1"
      DTS:LocaleID="-1"
      DTS:ObjectName="Call SplitPackageAny"
      DTS:DTSID="{0AAB5947-6897-48EF-B5EC-D9BFFC6F9BFE}"
      DTS:Description="Execute Package Task"
      DTS:CreationName="SSIS.ExecutePackageTask.3">
      <DTS:Variables />
      <DTS:ObjectData>
        <ExecutePackageTask>
          <Connection>{D84DFA79-A175-4E40-80E5-CC79B005F26C}</Connection>
        </ExecutePackageTask>
      </DTS:ObjectData>
    </DTS:Executable>

https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.dts.tasks.executepackagetask.executepackagetaskclass?view=sqlserver-2017

? taskHost.InnerObject.GetType().Name
"__ComObject"

Что мне нужно сделать, чтобы получить строго типизированный объект?Я добился успеха со многими другими объектами служб SSIS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...