sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor fejler FireError i C# 2012, men virker i VB, mens FireInformation virker i begge?

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 og out søgeord. De er ikke synonymer
  • VB lader dig gøre hvad som helst
  • Fejlhændelse i Komponenter har en annulleringsparameter


  1. For homebrew mysql-installationer, hvor er my.cnf?

  2. Ugyldigt objektnavn SQL Server 2008 R2 - Lagret procedure

  3. ved at bruge datetimeoffset-datatypen med jTDS

  4. Tæl forekomster baseret på flere betingelser for to borde