Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Проверьте этот ссылка , который описывает о корректной обработке ошибки задачи в Пакете SSIS.
у меня была почти та же проблема, но с получением файлов. Я хотел, чтобы пакет НЕ перестал работать, когда никакие файлы не были найдены на FTP-сервере. Вышеупомянутая ссылка заделывает ошибку, пузырясь и заставляя пакет перестать работать; что-то Вы думали бы FailPackageOnError=false, должно было сделать? :-S
Hope это решает его для Вас также!
(Я не могу принять свой собственный ответ, но это было решением, которое работало на меня.)
Это не может быть лучшее решение, но это работает.
я использую задачу сценария и имею набор переменных для получения информации о соединении FTP, и источник и целевые каталоги. (Поскольку, мы будем изменять сервер, на этом работают, и будет легче измениться в пакете конфигурации.)
я создаю текстовый файл на лету и пишу команды ftp в него:
Dim ftpStream As StreamWriter = ftpFile.CreateText()
ftpStream.WriteLine(ftpUser)
ftpStream.WriteLine(ftpPassword)
ftpStream.WriteLine("prompt off")
ftpStream.WriteLine("binary")
ftpStream.WriteLine("cd " & ftpDestDir)
ftpStream.WriteLine("mput " & ftpSourceDir)
ftpStream.WriteLine("quit 130")
ftpStream.Close()
Затем после предоставления его достаточно времени для реального закрытия я запускаю процесс, чтобы сделать команду ftp:
ftpParameters = "-s:" & ftpParameterLoc & ftpParameterFile & " " & ftpServer
proc = System.Diagnostics.Process.Start("ftp", ftpParameters)
Затем после предоставления его еще некоторое время для ftp обрабатывает для выполнения, я удаляю временный файл ftp (который имеет информацию о соединении в нем!).
, Если файлы не существуют в исходном каталоге (переменная имеет \\drive\dir\*.* отображающийся), то нет никакой ошибки. Если некоторая другая ошибка происходит, задача все еще перестала работать, как она должна.
я плохо знаком с SSIS, и это может быть клуджем. Но это работает на данный момент. Я предполагаю, что попросил лучший способ, и я не буду, конечно, утверждать, что это - он.
, Поскольку я указал, у меня нет способа знать то, чем файлы называют, или даже если существуют какие-либо файлы там вообще. Если они там, я хочу получить их.
У меня нет упакованного ответа для Вас, но так как никто больше ничего еще не отправил...
необходимо смочь установить переменную в задаче сценария ActiveX и затем использовать это, чтобы решить, должна ли задача FTP работать. Существует пример здесь , который работает с локальными путями. Надо надеяться, можно адаптировать понятие (или, если возможно, подключите диск FTP и сделайте это тот путь).
Поместите его в контейнер ForEach, который выполняет итерации по файлам для загрузки. Никакие файлы, никакой FTP, никакой отказ.
Можно перенаправить при отказе к другой задаче, которая ничего не делает, т.е. сценария, который просто возвращает true.
, Чтобы сделать это, добавьте новую задачу сценария, выделите свою задачу FTP, второй зеленый коннектор появится, перетащить это к задаче сценария и затем дважды щелкнуть по ней. Выберите Отказ на выпадающем Значении. Очевидно, необходимо будет затем обработать реальные отказы в этой задаче сценария все еще отобразиться прямо в истории Job.
Ага, хорошо - спасибо за разъяснение. Поскольку задача FTP не может возвратиться, папка, перечисляющая ее, не будет возможна использовать ForEach, поскольку я первоначально сказал - Который только работает, если Вы загружаете X сумм файлов к удаленному источнику.
Для загрузки X сумм файлов можно пойти двумя путями, или можно сделать это полностью в .NET в задаче сценария, или можно заполнить ArrayList с именами файлов из задачи сценария .NET, затем ForEach по ArrayList, передав имя файла переменной и загрузив то имя переменной в стандартной задаче FTP.
Пример кода для удовлетворения: http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=2472491&SiteID=1
Так, в вышеупомянутом, Вы получили бы FileNames () и заполнили бы ArrayList от этого, затем присвоили бы ArrayList переменной Типа объекта в Dts. Переменные, затем ForEach по тому Объекту (ArrayList) переменное использование кода что-то как: http://www.sqlservercentral.com/articles/SSIS/64014/
Вы можете использовать бесплатную задачу SSIS FTP Task ++ от eaSkills. Он не выдает ошибку, если файл или файлы не существуют, он поддерживает подстановочные знаки и дает вам возможность загружать и удалять, если вам это нужно.
Вот ссылка на страницу функции: http://www.easkills.com/ssis/ftptask