Обработка ошибок при выполнении пакета DTS с использованием .NET - PullRequest
0 голосов
/ 20 октября 2010

Я выполняю пакет DTS для SQL Server 2000, используя C #, следуя коду из этой статьи http://support.microsoft.com/kb/319985. как только пакет выполнен, я перебираю каждый шаг, чтобы выяснить, не произошел ли какой-либо шаг, и получить информациюошибка, если это не удалось.Я также использую эту информацию, чтобы узнать, был ли пакет успешным или нет (пакет потерпел неудачу, если на каком-либо шаге произошел сбой).проблема, с которой я здесь сталкиваюсь, заключается в том, что иногда происходит сбой пакета (переход к блоку перехвата) с общим сообщением об ошибке «Выполнение было отменено пользователем», и он не дает больше информации, чем этот.Если я запустил пакет вручную, используя DTSRUNUI, то обнаружил, что пакет ожидает текстовый файл в качестве входных данных, и файл не существует в указанном месте.в этом случае сообщение об ошибке из кода .NET должно сказать это ясно.Нужно ли вносить какие-либо изменения в код из статьи, чтобы получить более подробную информацию об ошибках.Я добавил следующее, чтобы получить информацию об ошибке, но это не сильно помогло.есть два свойства, называемые «FailonError» для пакета и «ExecuteInMainThread» для объектов шага.Я тоже пытался их настроить, но это тоже не помогло.не уверен, если они необходимы.

    bool success = true;
if (package != null)
{
    foreach (Step step in package.Steps)
    {
        if (step.ExecutionStatus == DTSStepExecStatus.DTSStepExecStat_Completed 
            && step.ExecutionResult == DTSStepExecResult.DTSStepExecResult_Failure)
        {
            int errorCode, helpContext;
            string errorSource, errorDescription, helpFile, iDofInterfaceWithError;

            step.GetExecutionErrorInfo(out errorCode, out errorSource, out errorDescription, out helpFile,
                                       out helpContext, out iDofInterfaceWithError);
            LogToTextFile(
                string.Format(
                    "step name: {0} error Code : {1}, error Source : {2}, error Description: {3}", step.Name,
                    errorCode, errorSource, errorDescription));
            success = false;
        }
    }
}

1 Ответ

0 голосов
/ 17 декабря 2010

Я использую DTSRun.EXE для выполнения пакета DTS (запустив процесс из C #) и перенаправляю его консольный вывод в файл, и этого вывода обычно достаточно в случае любых ошибок.

...