sql >> データベース >  >> RDS >> Sqlserver

C# 2012 では FireError が失敗するのに VB では機能するのに、FireInformation は両方で機能するのはなぜですか?

    スクリプト コンポーネント (データ フロー タスク) とスクリプト タスク (制御フロー) からエラー イベントと情報イベントを発生させるための、類似しているが異なる構文を混同している可能性があります。コンポーネントのインテリセンスは、パラメータが pbCancel であるのに対し、fireAgain は情報タスクのパラメータに対応することを示しています。

    スクリプト コンポーネント

    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);
    }
    

    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
    

    パラメータが参照によってであることを明示的に指定する必要はありません。これは、呼び出し時にも指定する C# の要件に対して、定義で行われているように見えるためです。 com/questions/4383167/byref-vs-byval-clarification">ByRef と ByVal の明確化

    スクリプト タスク

    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
    

    まとめ

    • C# では ref を指定する必要があります そしてout キーワード。同義語ではありません
    • VB ならなんでもできる
    • コンポーネントのエラー イベントにはキャンセル パラメータがあります


    1. EAVSQLデザインのクエリ

    2. これは、オフセット制限付きの行数の総数を取得することは可能ですか?

    3. MySQLでテーブルの列名を取得しますか?

    4. 挿入前にテーブル内の重複しない行をチェックする手順(Oracle)