SSIS包中的脚本任务到FTP

时间:2012-08-13 15:04:59

标签: vb.net ssis

所有

我有一个SSIS包(Sql Server 2008),它执行一些数据流和文件操作,然后最终将文件上传到FTP服务器。

我能够完成大部分工作,但最后一件重要的工作。使用“数据流”,使用数据库中的数据生成文本文件。现在该文件在末尾用时间戳压缩,例如:“filename_08132012.zip”。

时间戳每天都在变化,因此每次上传到FTP服务器时都会有一个新文件。所以,而不是“FTP任务”(我无法找到使这项工作的方法),我有一个“脚本任务”,查找具有今天的日期的文件,并将其上传到FTP服务器。以下是代码,但我有两个与此相关的问题:

  1. 我希望这个“脚本任务”能够获取当天的文件ex:filename_08132012.zip,filename_08142012.zip。我有代码将日期转换为具有适当格式的字符串。但出于某种原因,事实并非如此。
  2. 如何逐步执行此脚本文件,Visual Studio是否允许VB.net代码?此脚本任务GUI不允许单步执行。
  3. 它将空文件上传到FTP服务器。一个0字节的文件。我该如何解决这个问题?
  4. ' Microsoft SQL Server Integration Services Script Task
    ' Write scripts using Microsoft Visual Basic 2008.
    ' The ScriptMain is the entry point class of the script.
    
    Imports System
    Imports System.Data
    Imports System.Math
    Imports Microsoft.SqlServer.Dts.Runtime
    
    <System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
    <System.CLSCompliantAttribute(False)> _
    Public Class ScriptMain
        Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    Enum ScriptResults
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    End Enum
    
    
    Public Sub Main()
        '
        ' Add your code here
        '
    
        Try
    
            'Create the connection to the ftp server
    
            Dim cm As ConnectionManager = Dts.Connections.Add("FTP")
    
            'Set the properties like username & password
    
            cm.Properties("ServerName").SetValue(cm, "172.24.97.21")
    
            cm.Properties("ServerUserName").SetValue(cm, "bbxuser")
    
            cm.Properties("ServerPassword").SetValue(cm, "blockbuster")
    
            cm.Properties("ServerPort").SetValue(cm, "21")
    
            cm.Properties("Timeout").SetValue(cm, "0") 'The 0 setting will make it not timeout
    
            cm.Properties("ChunkSize").SetValue(cm, "1000") '1000 kb
    
            cm.Properties("Retries").SetValue(cm, "1")
    
            'create the FTP object that sends the files and pass it the connection created above.
    
            Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing))
    
            'Connects to the ftp server
    
            ftp.Connect()
    
            'Build a array of all the file names that is going to be FTP'ed (in this case only one file)
    
            Dim files(0) As String
    
    
            Dim FileDate As Date
            FileDate = System.DateTime.Today
    
            files(0) = "D:\NCR\Apps\RBX.SSIS.BBX_Customer_Extract\Email_Campaign\Redbox_EmailCampaign_and_Analytics_Extract_" + FileDate.ToString("mmddyyyy") + ".zip"
    
            'ftp the file
    
            'Note: I had a hard time finding the remote path directory. I found it by mistake by creating both the FTP connection and task in the SSIS package and it defaulted the remote path setting in the FTP task.
    
            ftp.SendFiles(files, "/Email Campaign", True, False) ' the True makes it overwrite existing file and False is saying that it is not transferring ASCII
    
            ftp.Close()
    
        Catch ex As Exception
    
            Dts.TaskResult = ScriptResults.Failure
    
        End Try
    
        Dts.TaskResult = ScriptResults.Success
    End Sub
    

    结束班

1 个答案:

答案 0 :(得分:0)

在我提出问题之后,我想出了几件事。

  1. 我使用的格式不正确。正确的格式是FileDate.ToString(“MMddyyyy”)+“。zip”
  2. files(0) = "D:\NCR\Apps\RBX.SSIS.BBX_Customer_Extract\Email_Campaign\Redbox_EmailCampaign_and_Analytics_Extract_" + FileDate.ToString("mmddyyyy") + ".zip"
    files(0) = "D:\NCR\Apps\RBX.SSIS.BBX_Customer_Extract\Email_Campaign\Redbox_EmailCampaign_and_Analytics_Extract_" + FileDate.ToString("MMddyyyy") + ".zip"
    
    1. (见上文)
    2. 我刚发现这个并且有效:Troubleshoot Script Task
    3. 解决1&amp; 2,解决3