Я видел много кодов, лежащих вокруг, но, по-видимому, они не помогают.Как скомпрометировать задачу сценария SSIS (с использованием C#, 2008)
Вот логика я должен следовать:
У меня есть файл получать чтения, который имеет поле суммы. Это поле суммы может иметь отрицательные значения. Мне нужно переместить файл и выдать пакет, если я найду отрицательную сумму в файле.
То, что я сделал до сих пор:
Добавлена задачей сценария, чтобы получить путь к файлу, добавляется цикл, чтобы прочитать все файлы в этом пути, внутри цикла (добавлено задание DTS для перемещения членов с отрицательными количествами к записи набор, добавил задачу сценария, чтобы проверить погоду есть какая-либо строка в наборе записей, если число> 0, то FAIL задачи сценария таким образом, не пакет, еще проход)
код в scipt выполнения задания:
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;
}
}
I все работает, за исключением этого сценария Tas к.
Я также попробовал FireError, даже если это не вызвано.
Что происходит, может ли кто-нибудь объяснить, пожалуйста?
Я не понимаю ваш комментарий к 'Dts.TaskResult = (int) ScriptResults.Failure;' Это не работает. Помогите мне понять, как этого не происходит. – billinkc
@billinkc У меня есть событие информации о пожаре, которое выполняется, но когда выполняется сценарий 'Dts.TaskResult = (int) ScriptResults.Failure;' step, ScriptTask никогда не останавливается/терпит неудачу. Он все еще находится в «желтой фазе». – DURTAYY
Я думаю, вам нужно установить свойство 'Script Task'' ForcedParentOnFailure' или 'ForcedPackageOnFailure' в значение True в зависимости от вашего требования. У вас есть задача в контейнере цикла. – Tak