Може да обърквате сходния, но различен синтаксис за задействане на грешка спрямо информационни събития от Script Components (задача за поток от данни) спрямо Script Tasks (контролен поток). Intellisense за Component показва, че параметърът е pbCancel, докато fireAgain съответства на параметъра на Information Task.
Скрипт компонент
Пример за компонент на скрипт на C#
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
bool cancel = false;
bool fireAgain = false;
this.ComponentMetaData.FireInformation(0, "My sub", "info", string.Empty, 0, ref fireAgain);
this.ComponentMetaData.FireError(0, "My sub", "error", string.Empty, 0, out cancel);
}
VB компонент
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim cancel As Boolean
Dim fireAgain As Boolean
Me.ComponentMetaData.FireInformation(0, "my sub", "info", String.Empty, 0, fireAgain)
Me.ComponentMetaData.FireError(0, "I hate vb", "Error", String.Empty, 0, cancel)
End Sub
Няма нужда да се указва изрично, че даден параметър е по препратка, тъй като това изглежда се прави в дефиницията спрямо изискването на C# да се указва също и при извикване.Поясняване на ByRef срещу ByVal
Скриптова задача
C#
public void Main()
{
bool fireAgain = false;
this.Dts.Events.FireInformation(0, "my sub", "info", string.Empty, 0, ref fireAgain);
// Note, no cancel available
this.Dts.Events.FireError(0, "my sub", "error", string.Empty, 0);
}
VB
Public Sub Main()
Dim fireAgain As Boolean = False
Me.Dts.Events.FireInformation(0, "my sub", "info desc", String.Empty, 0, fireAgain)
Me.Dts.Events.FireError(0, "my sub", "error desc", String.Empty, 0)
Dts.TaskResult = ScriptResults.Success
End Sub
Резюме
- C# изисква да посочите
ref
иout
ключови думи. Те не са синоними - VB ви позволява да правите всичко
- Събитието за грешка в компонентите има параметър за отмяна