什么是base.preexecute();或者base.postexecute()实际上呢?

时间:2015-03-16 16:01:05

标签: c# ssis script-component

当我在SSIS中创建一个新的脚本组件时,preexecute和post execute方法包含base.PreExecute();和base.PostExecute();线...

我想知道这些线路做了什么,以及修改/删除它们的分支。谢谢!

2 个答案:

答案 0 :(得分:1)

TL;博士;

对于Integration Services的当前版本,这些是无操作方法。目前取消它们的后果将不复存在。但是,Microsoft可能随时在这些方法中添加一项操作,这对于Integration Services的健康至关重要(通过补丁极不可能,通过发布新版本不太可能)。他们没有在2008年,2012年或2014年这样做,但v.Next是未知的。

除非你有充分的理由不花费瞬间闪烁击中基本方法,否则我就把它放在那里。

升; R

脚本组件,创建一个ScriptMain类,该类派生自UserComponent,派生自ScriptComponent

每当您创建/修改脚本组件的输入和输出时,Visual Studio都会自动生成

UserComponent

/* 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

在Pre / PostExecute组件上按F12会转到

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()
{
}

virtual (C# reference)

上刷新记忆
  

virtual关键字用于修改方法,属性,索引器或事件声明,并允许在派生类中重写它。例如,任何继承它的类都可以覆盖此方法:

答案 1 :(得分:0)

我无法确切地告诉你两个基本方法正在做什么,但是这个answer讨论了所有SSIS任务组件的生命周期:

  

SSIS中的所有任务/容器具有相同的生命周期。您可以通过观看事件处理程序来查看其中一些内容。在脚本组件中,在数据流任务内部,将进行各种步骤。部分是验证(这个合同说我应该从这个表中有一个整数类型的列 - 我可以连接,它是否存在,它是正确的类型等)。

     

验证后,任务将具有设置和拆除步骤以执行。由于您似乎在脚本中使用SSIS变量,因此花费了前/后执行时间的一部分,允许将变量(SSIS)转换为变量(.net)并再次返回。

所以,我认为你不应该删除它们,除非你有特定要求SSIS的默认预处理和后处理没有发生。