Du forveksler muligvis den lignende, men forskellige syntaks for udløsningsfejl vs. informationsbegivenheder fra scriptkomponenter (dataflowopgave) versus scriptopgaver (kontrolflow). Intellisense for Component angiver, at parameteren er pbCancel, mens fireAgain svarer til informationsopgavens parameter.
Script-komponent
Eksempel på C#-scriptkomponent
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-komponent
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
Der er ingen grund til eksplicit at specificere, at en parameter er By Reference, da det ser ud til at være gjort i definitionen versus C#-kravet for at specificere det også ved invocation.ByRef vs ByVal Clarification
Scriptopgave
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
Oversigt
- C# kræver, at du angiver
ref
ogout
søgeord. De er ikke synonymer - VB lader dig gøre hvad som helst
- Fejlhændelse i Komponenter har en annulleringsparameter