Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum schlägt FireError in C# 2012 fehl, funktioniert aber in VB, während FireInformation in beiden funktioniert?

Möglicherweise verwechseln Sie die ähnliche, aber unterschiedliche Syntax zum Auslösen von Fehler- und Informationsereignissen von Skriptkomponenten (Datenflussaufgabe) mit Skriptaufgaben (Steuerungsfluss). Das Intellisense für Component gibt an, dass der Parameter pbCancel ist, während fireAgain dem Parameter der Informationsaufgabe entspricht.

Skriptkomponente

Beispiel für eine C#-Skriptkomponente

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-Komponente

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

Es ist nicht erforderlich, explizit anzugeben, dass ein Parameter „By Reference“ ist, da dies anscheinend in der Definition im Gegensatz zur C#-Anforderung erfolgt, ihn auch beim Aufruf anzugeben.ByRef vs. ByVal-Klärung

Skriptaufgabe

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

Zusammenfassung

  • C# erfordert, dass Sie ref angeben und out Schlüsselwörter. Sie sind keine Synonyme
  • Mit VB können Sie alles tun
  • Fehlerereignisse in Komponenten haben einen Abbruchparameter