Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego FireError nie działa w C# 2012, ale działa w VB, podczas gdy FireInformation działa w obu?

Możesz mylić podobną, ale inną składnię do uruchamiania zdarzeń błędów i informacji ze składników skryptu (zadanie przepływu danych) i zadań skryptu (przepływ sterowania). Intellisense dla Component wskazuje, że parametr to pbCancel, podczas gdy fireAgain odpowiada parametrowi zadania informacyjnego.

Komponent skryptu

Przykład komponentu skryptu 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);
}

Komponent 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

Nie ma potrzeby jawnego określania, że ​​parametr jest przez odniesienie, ponieważ wydaje się, że jest to zrobione w definicji w przeciwieństwie do wymogu C#, aby określić go również przy wywołaniu.ByRef vs ByVal Clarification

Zadanie skryptu

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

Podsumowanie

  • C# wymaga podania ref i out słowa kluczowe. To nie są synonimy
  • VB pozwala robić wszystko
  • Zdarzenie błędu w komponentach ma parametr anulowania


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy są jakieś wady korzystania z NewSequentialID?

  2. Przekroczono limit czasu zapytania SQL Server w zależności od klauzuli Where

  3. Jak w programie SQL Server wygenerować identyfikator klucza podstawowego automatycznego przyrostu, który składa się z roku , znaku specjalnego i numeru serii sekwencyjnej?

  4. Nowe wydanie:pakiet dostrajania Spotlight 7.1.9

  5. Jak włączyć wyjście RPC za pomocą T-SQL