0

当我在 SSIS 中创建新的脚本组件时,预执行和后执行方法包含 base.PreExecute(); 和 base.PostExecute(); 线...

我想知道这些行的作用,以及修改/删除它们的后果。谢谢!

4

2 回答 2

2

tl;博士;

对于当前版本的集成服务,这些是无操作方法。当前删除它们的后果将不存在。但是,Microsoft 可能随时在这些方法中添加对集成服务的良好运行至关重要的操作(通过补丁不太可能,通过发布新版本则不太可能)。他们在 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

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

虚拟上刷新我的记忆(C# 参考)

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

于 2015-03-16T17:13:49.790 回答
0

我不能真正告诉你这两个基本方法在做什么,但这个答案 谈到了所有 SSIS 任务组件的生命周期:

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

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

所以,我认为你不应该删除它们,除非你有一个特定的要求,即不进行 SSIS 的默认预处理和后处理。

于 2015-03-16T16:17:32.283 回答