Что делает base.preexecute(); или base.postexecute() на самом деле?

Когда я создаю новый компонент скрипта в SSIS, методы pre-execute и post-execute содержат base.PreExecute(); и base.PostExecute(); линии...

Я хочу знать, что делают эти строки, и последствия их изменения/удаления. Спасибо!


person user2367068    schedule 16.03.2015    source источник


Ответы (2)


tl;dr;

В текущем выпуске служб Integration Services это методы без операций. Текущие последствия для их удаления будут отсутствовать. Однако корпорация Майкрософт может в любой момент добавить в эти методы операцию, имеющую решающее значение для нормального функционирования служб Integration Services (крайне маловероятно, что это будет сделано с помощью исправления, в меньшей степени — с помощью выпуска новой версии). Они не сделали этого для 2008, 2012 или 2014, но v.Next неизвестен.

Если у вас нет веской причины не тратить мгновенное мерцание на базовый метод, я бы просто оставил его там.

l;r

Компонент скрипта создает класс ScriptMain, который является производным от UserComponent, который является производным от ScriptComponent.

UserComponent автоматически генерируется Visual Studio всякий раз, когда вы создаете или изменяете входные и выходные данные для компонента сценария.

/* THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
*  Microsoft SQL Server Integration Services component wrapper
*  This module defines the base class for your component
*  THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT! */

ScriptMain — это ваша игровая площадка, где вы можете при желании вызывать методы base.pre/postexecute.

В зависимости от вашей версии ScriptComponent происходит из Microsoft.SqlServer.TxScript.dll.

  • C:\Program Files (x86)\Microsoft SQL Server\{VersionNumber}\DTS\PipelineComponents\Microsoft.SqlServer.TxScript.dll

Нажатие F12 в компоненте Pre/PostExecute приводит меня к

public class ScriptComponent
{
    public virtual void PostExecute();
    public virtual void PreExecute();
}

Я запустил ILSpy, и, судя по нему, эти методы пусты.

// Microsoft.SqlServer.Dts.Pipeline.ScriptComponent
public virtual void PostExecute()
{
}

// Microsoft.SqlServer.Dts.Pipeline.ScriptComponent
public virtual void PreExecute()
{
}

Чтобы освежить в памяти виртуальный (справочник по C#)

Ключевое слово virtual используется для изменения объявления метода, свойства, индексатора или события и позволяет переопределить его в производном классе. Например, этот метод может быть переопределен любым классом, который его наследует:

person billinkc    schedule 16.03.2015

Я не могу точно сказать вам, что делают два базовых метода, но этот ответ рассказывает о жизненном цикле всех служб SSIS. компоненты задачи:

Все задачи/контейнеры в SSIS имеют одинаковый жизненный цикл. Вы можете увидеть некоторые из них, наблюдая за срабатыванием обработчиков событий. В компоненте скрипта внутри задачи потока данных будут выполняться различные шаги. Частью этого является проверка (в этом контракте говорится, что у меня должен быть столбец из этой таблицы, который имеет целочисленный тип — могу ли я подключиться, существует ли он, правильный ли это тип и т. д.).

После проверки задачи будут иметь этапы настройки и демонтажа, которые необходимо выполнить. Поскольку вы, похоже, работаете с переменными SSIS в своем сценарии, часть этого времени до и после выполнения тратится на преобразование переменной (SSIS) в переменную (.net) и обратно.

Итак, я думаю, что вам не следует удалять их, если у вас нет особого требования, чтобы предварительная и постобработка SSIS по умолчанию не выполнялась.

person Brian Watt    schedule 16.03.2015