Wie zu scheitern einer SSIS-Skript-Task (mit C#, 2008)

Ich habe gesehen, viele codes rumliegen, aber anscheinend Sie nicht helfen.

Hier ist die Logik, die ich zu befolgen:

Ich habe eine Datei immer Lesen, die hat eine Menge Bereich. Dieser Betrag-Feld kann negative. Ich habe um die Datei zu verschieben und nicht die Paket, wenn ich einen negativen Betrag in der Datei.

Was ich gemacht habe bisher:

Hinzugefügt, ein Skript-task zu bekommen, Datei-Pfad Hinzugefügt-Schleife zum Lesen alle Dateien in diesem Pfad, der innerhalb der Schleife(Hinzugefügt DTS-task zu verschieben, Mitglieder mit negativen Mengen zu einem Datensatz Hinzugefügt-Skript Aufgabe zu prüfen, ob es werden alle Zeilen im recordset, wenn count > 0 wird dann nicht das Skript Aufgabe, so dass das Paket, sonst pass)

Den scipt-task-code:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;
using System.Xml;

//name space call here etc, etc..
enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
public void Main()
        {
            //TODO: Add your code here

            bool fireAgain = true;
            DataTable dtable = new DataTable();
            OleDbDataAdapter da = new OleDbDataAdapter();

            //Setting this incase there are multiple files being checked
            Dts.Variables["InvalidFile"].Value = "False";


            da.Fill(dtable, Dts.Variables["NegativeAmountMember"].Value);

            //I do get my desired result here of 1    
            Dts.Events.FireInformation(0, "dtable", dtable.Rows.Count.ToString(), String.Empty, 0, ref fireAgain);

            if (dtable.Rows.Count > 0)
            {
                Dts.Variables["InvalidFile"].Value = "True";
                Dts.Events.FireInformation(0, "InvalidFile", Dts.Variables["InvalidFile"].Value.ToString(), String.Empty, 0, ref fireAgain); //This does get displayed but, nothing happens after this step.
                Dts.TaskResult = (int)ScriptResults.Failure; //this method never technically executes
                return; //added this because someone somewhere said in a post to do so
            }
            else
            {
                Dts.TaskResult = (int)ScriptResults.Success;
            }
        }

Habe ich alles, außer scheitern dieses Skript Aufgabe.

Ich habe auch versucht FireError, gar nicht aufgerufen.

Was passiert ist, kann jemand bitte erklären?

  • Ich verstehe nicht, Ihren Kommentar auf Dts.TaskResult = (int)ScriptResults.Failure; nicht, Dass die Aufgabe. Helfen Sie mir zu verstehen, wie das nicht passiert
  • Ich habe das Feuer info-Ereignis ausgeführt wird, aber, wenn die Dts.TaskResult = (int)ScriptResults.Failure; Schritt wird immer ausgeführt, die ScriptTask hört nie auf/schlägt fehl. Es ist immer noch in der "gelben phase".
  • Ich glaube, Sie brauchen, um die Script Task Eigenschaft ForcedParentOnFailure oder ForcedPackageOnFailure zu Wahren je nach Ihrer Anforderung. Sie haben die Aufgabe, in ein-Schleifen-container.
  • FailParentOnFailure und FailPackageOnFailure waren beide auf true gesetzt. Aber, das Problem war ein deadlock in den code. Eine Antwort darauf.
InformationsquelleAutor DURTAYY | 2014-09-04
Schreibe einen Kommentar