|
|
1
14
我知道你已经找到了问题的答案。这是为其他用户谁可能偶然发现这个问题。这里有一种可能的实现方法。
逐步过程:
希望有帮助。 脚本任务代码:
C级#
包括
VB语言
可用于
截图1:
截图3:
截图4:
截图5:
截图6:
截图7:
截图8:
截图9:
截图#10:
截图#11:
|
|
|
3
5
我刚刚遇到了这个问题,在阅读了这里的一些回复之后,没有什么能真正解决我的问题,这里的解决方案在复杂性方面似乎是疯狂的。
我的解决办法很简单:
|
|
|
4
3
这也许不是最好的解决方案,但这是可行的。 我使用一个脚本任务,有一堆变量用于ftp连接信息,以及源目录和目标目录(因为,我们将更改运行此功能的服务器,并且在配置包中更改会更容易。) 我动态创建一个文本文件,并向其中写入ftp命令:
然后,在给它更多的时间让ftp进程运行之后,我删除了临时ftp文件(其中包含连接信息!)。 如果源目录中不存在文件(变量具有\\drive\dir\*.*映射),则不存在错误。如果发生其他错误,任务仍然会失败。
正如我指出的,我无法知道这些文件的名称,甚至根本不知道那里是否有任何文件。如果他们在那里,我想得到他们。 |
|
|
5
1
您应该能够在ActiveX脚本任务中设置一个变量,然后使用该变量来决定是否应该运行FTP任务。有一个例子 here 这适用于本地路径。希望您可以调整这个概念(或者如果可能的话,映射FTP驱动器并这样做)。 |
|
|
6
1
2) 将此代码添加到FTP任务OnError事件处理程序。
|
|
|
7
0
把它放在ForEach容器中,该容器遍历要上载的文件。没有文件,没有FTP,没有失败。 |
|
|
8
0
为此,添加新的脚本任务,突出显示FTP任务,第二个绿色连接器将出现,将其拖到脚本任务,然后双击它。在“值”下拉列表中选择“失败”。显然,您将需要处理此脚本任务中的实际失败,以便仍然显示在作业历史记录中。 |
|
|
9
0
啊哈,好吧-谢谢你的澄清。由于FTP任务无法返回文件夹列表,因此无法使用ForEach,正如我最初所说的那样-只有将X个文件上载到远程源时,ForEach才有效。 要下载X数量的文件,可以采用两种方式,一种是完全在.Net脚本任务中完成,另一种是用.Net脚本任务中的文件名填充ArrayList,然后在ArrayList上ForEach,将文件名传递给一个变量,然后在标准FTP任务中下载该变量名。 代码示例: http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=2472491&SiteID=1 因此,在上面,您将获得FileNames()并从中填充ArrayList,然后将ArrayList分配给Dts.Variables中的一个对象类型变量,然后使用如下代码将ForEach分配给该对象(ArrayList)变量: http://www.sqlservercentral.com/articles/SSIS/64014/ |
|
|
10
0
以下是功能页的链接: http://www.easkills.com/ssis/ftptask |
|
|
11
0
1) 在包中创建一个名为FTP\u Error的变量 2) 单击FTP任务,然后单击“事件处理程序”选项卡 3) 在页面中单击以创建“FTP Task/OnError”的事件处理程序-每当FTP出现问题时,此操作都会触发 4) 从工具箱中,拖入脚本任务项,然后双击以打开它 5) 在第一个弹出窗口中,ReadOnlyVariables-add System::ErrorCode,System::ErrorDescription
7) 编辑脚本 8) 在脚本中,设置FTP\u Error变量以保存上面的ReadOnlyVariables:
10) 点击“确定”来编写任务脚本
12) 从FTP任务,OnError转到一个新的脚本任务,并编辑它 13) ReadOnlyVariables:User::FTP\u之前的错误 14) 现在,当FTP上找不到文件时,错误代码是-1073573501 (您可以在此处找到错误代码参考列表: http://msdn.microsoft.com/en-us/library/ms345164.aspx ) 15) 在你的脚本中,输入逻辑来做你想做的事情——如果你发现一个“找不到文件”的代码,那么也许你说任务成功了。如果不是,则任务失败。你的正常流量可以按你的意愿处理:
从那里,你的成功/失败流将做你想做的事情。 |
|
|
12
0
另一种方法是使用
FTP File Enumerator
|