Du kan blanda ihop den liknande men olika syntaxen för avfyrningsfel kontra informationshändelser från skriptkomponenter (dataflödesuppgift) kontra skriptuppgifter (kontrollflöde). Intellisense för Component indikerar att parametern är pbCancel medan fireAgain motsvarar informationsuppgiftens parameter.
Skriptkomponent
Exempel på C#-skriptkomponent
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
Det finns inget behov av att uttryckligen ange att en parameter är By Reference eftersom det verkar göras i definitionen kontra C#-kravet för att specificera den också vid anrop.ByRef vs ByVal Clarification
Skriptuppgift
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
Sammanfattning
- C# kräver att du anger
ref
ochout
nyckelord. De är inte synonymer - VB låter dig göra vad som helst
- Felhändelse i komponenter har en avbrytningsparameter