sql >> Databáze >  >> RDS >> Sqlserver

Proč FireError selže v C# 2012, ale funguje ve VB, zatímco FireInformation funguje v obou?

Možná si pletete podobnou, ale odlišnou syntaxi pro spouštění chybových a informačních událostí z komponent skriptu (úloha toku dat) versus úlohy skriptu (tok řízení). Intellisense for Component udává, že parametr je pbCancel, zatímco fireAgain odpovídá parametru Information Task.

Komponenta skriptu

Příklad komponenty skriptu 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);
}

Komponenta 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

Není potřeba explicitně specifikovat, že parametr je podle odkazu, protože to vypadá, že je to provedeno v definici oproti požadavku C# na jeho specifikaci také při vyvolání.ByRef vs ByVal Clarification

Úloha skriptu

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

Shrnutí

  • C# vyžaduje, abyste zadali ref a out klíčová slova. Nejsou to synonyma
  • VB vám umožní dělat cokoli
  • Událost chyby v komponentách má parametr zrušení


  1. Jak zlepšit výkon replikace v clusteru MySQL nebo MariaDB Galera

  2. Zadaný klíč byl příliš dlouhý; maximální délka klíče je 767 bajtů - ASPNet Identity MySQL

  3. tsql vrací tabulku z funkce nebo procedury úložiště

  4. důsledky změny úložiště mysql, když aplikace běží v produkci