3

全部,

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

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

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

  1. 我希望这个“脚本任务”能够获取当天的文件,例如:filename_08132012.zip、filename_08142012.zip。我有将日期转换为格式正确的字符串的代码。但由于某种原因,事实并非如此。
  2. 如何逐步执行此脚本文件,Visual Studio 是否允许 VB.net 代码?此脚本任务 GUI 不允许单步执行。
  3. 它将一个空文件上传到 FTP 服务器。一个 0 字节的文件。我该如何解决这个问题?
' 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

结束类

4

1 回答 1

1

在我写完这个问题之后,我想出了一些事情。

  1. 我使用了不正确的格式。正确的格式是 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"
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 和 2,解决 3
于 2012-08-13T15:13:36.493 回答