sql >> Databasteknik >  >> RDS >> Sqlserver

Varför misslyckas FireError i C# 2012, men fungerar i VB, medan FireInformation fungerar i båda?

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 och out nyckelord. De är inte synonymer
  • VB låter dig göra vad som helst
  • Felhändelse i komponenter har en avbrytningsparameter


  1. Summa php-array (skapad från mysql-resultat) beroende på mysql-värden i en annan mysql-kolumn

  2. Entity Framework 6 + Code First + Oracle 11g

  3. MySql kan inte göra kolumn auto_increment

  4. Laravel sammanfogar med 3 bord