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

Perché FireError non riesce in C# 2012, ma funziona in VB, mentre FireInformation funziona in entrambi?

Potresti confondere la sintassi simile ma diversa per l'attivazione di errori rispetto agli eventi informativi da Componenti script (attività flusso di dati) rispetto a Attività script (flusso di controllo). Intellisense for Component indica che il parametro è pbCancel mentre fireAgain corrisponde al parametro dell'attività di informazione.

Componente script

Esempio di componente di script 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);
}

Componente 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

Non è necessario specificare in modo esplicito che un parametro è Per riferimento poiché ciò sembra essere fatto nella definizione rispetto al requisito C# per specificarlo anche durante la chiamata.Chiarimento ByRef vs ByVal

Attività script

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

Riepilogo

  • C# richiede di specificare ref e out parole chiave. Non sono sinonimi
  • VB ti consente di fare qualsiasi cosa
  • L'evento di errore nei componenti ha un parametro di annullamento