Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que FireError falha em C# 2012, mas funciona em VB, enquanto FireInformation funciona em ambos?


Você pode estar confundindo a sintaxe semelhante, mas diferente, para disparar erros versus eventos de informações de Componentes de Script (tarefa de fluxo de dados) versus Tarefas de Script (fluxo de controle). O intellisense para Component indica que o parâmetro é pbCancel enquanto o fireAgain corresponde ao parâmetro da Tarefa de Informação.

Componente de script


Exemplo de componente de 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

Não há necessidade de especificar explicitamente que um parâmetro é Por referência, pois isso parece ser feito na definição versus o requisito do C# para especificá-lo também na invocação.ByRef vs ByVal Esclarecimento

Tarefa de 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

Resumo

  • C# requer que você especifique ref e out palavras-chave. Eles não são sinônimos
  • VB permite que você faça qualquer coisa
  • Evento de erro em Componentes tem um parâmetro de cancelamento