• #region Help: Introduction to the script task

    /* The Script Task allows you to perform virtually any operation that can be accomplished in

    * a .Net application within the context of an Integration Services control flow.

    *

    * Expand the other regions which have "Help" prefixes for examples of specific ways to use

    * Integration Services features within this script task. */

    #endregion

    #region Namespaces

    using System;

    using System.Data;

    using Microsoft.SqlServer.Dts.Runtime;

    using System.Windows.Forms;

    using WinSCP;

    #endregion

    namespace ST_81036d5728924731b344849fd92f8b0b

    {

    /// <summary>

    /// ScriptMain is the entry point class of the script. Do not change the name, attributes,

    /// or parent of this class.

    /// </summary>

    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]

    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

    {

    #region Help: Using Integration Services variables and parameters in a script

    /* To use a variable in this script, first ensure that the variable has been added to

    * either the list contained in the ReadOnlyVariables property or the list contained in

    * the ReadWriteVariables property of this script task, according to whether or not your

    * code needs to write to the variable. To add the variable, save this script, close this instance of

    * Visual Studio, and update the ReadOnlyVariables and

    * ReadWriteVariables properties in the Script Transformation Editor window.

    * To use a parameter in this script, follow the same steps. Parameters are always read-only.

    *

    * Example of reading from a variable:

    * DateTime startTime = (DateTime) Dts.Variables["System::StartTime"].Value;

    *

    * Example of writing to a variable:

    * Dts.Variables["User::myStringVariable"].Value = "new value";

    *

    * Example of reading from a package parameter:

    * int batchId = (int) Dts.Variables["$Package::batchId"].Value;

    *

    * Example of reading from a project parameter:

    * int batchId = (int) Dts.Variables["$Project::batchId"].Value;

    *

    * Example of reading from a sensitive project parameter:

    * int batchId = (int) Dts.Variables["$Project::batchId"].GetSensitiveValue();

    * */

    #endregion

    #region Help: Firing Integration Services events from a script

    /* This script task can fire events for logging purposes.

    *

    * Example of firing an error event:

    * Dts.Events.FireError(18, "Process Values", "Bad value", "", 0);

    *

    * Example of firing an information event:

    * Dts.Events.FireInformation(3, "Process Values", "Processing has started", "", 0, ref fireAgain)

    *

    * Example of firing a warning event:

    * Dts.Events.FireWarning(14, "Process Values", "No values received for input", "", 0);

    * */

    #endregion

    #region Help: Using Integration Services connection managers in a script

    /* Some types of connection managers can be used in this script task. See the topic

    * "Working with Connection Managers Programatically" for details.

    *

    * Example of using an ADO.Net connection manager:

    * object rawConnection = Dts.Connections["Sales DB"].AcquireConnection(Dts.Transaction);

    * SqlConnection myADONETConnection = (SqlConnection)rawConnection;

    * //Use the connection in some code here, then release the connection

    * Dts.Connections["Sales DB"].ReleaseConnection(rawConnection);

    *

    * Example of using a File connection manager

    * object rawConnection = Dts.Connections["Prices.zip"].AcquireConnection(Dts.Transaction);

    * string filePath = (string)rawConnection;

    * //Use the connection in some code here, then release the connection

    * Dts.Connections["Prices.zip"].ReleaseConnection(rawConnection);

    * */

    #endregion

    /// <summary>

    /// This method is called when this script task executes in the control flow.

    /// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

    /// To open Help, press F1.

    /// </summary>

    public void Main()

    {

    // TODO: Add your code here

    //Protocol = WinSCP.Protocol.Ftp,

    string sServer = "-----------server name ";

    string sUserName = "----------";

    string sPassword = "---------------";

    int iTimeOut = 20;

    int iPort = 21;

    string sRemotePath = "/";

    //string sRemoteFileName = "PM_UserFile";

    //string sNewFileName = "PM_UserFile.txt";

    string sLocalPath = @"c:\UtilityPhoneFiles";

    string sDownLoadedFilePath = "";

    bool bRemoveFileAfterDownload = true;

    string sSSHKey = "-----------------";

    SessionOptions sessionOptions = new SessionOptions

    {

    Protocol = Protocol.Ftp,

    FtpMode = WinSCP.FtpMode.Passive,

    FtpSecure = FtpSecure.ExplicitTls,

    HostName = sServer,

    UserName = sUserName,

    Password = sPassword,

    TlsHostCertificateFingerprint = sSSHKey

    };

    try

    {

    using (Session session = new Session())

    {

    // WinSCP .NET assembly must be in GAC to be used with SSIS,

    // set path to WinSCP.exe explicitly, if using non-default path.

    session.ExecutablePath = @"C:\Program Files (x86)\WinSCP\WinSCP.exe";

    session.DisableVersionCheck = true;

    // Connect

    session.Open(sessionOptions);

    TransferOptions transferOptions = new TransferOptions();

    transferOptions.TransferMode = TransferMode.Binary;

    transferOptions.PreserveTimestamp = true;

    SynchronizationResult synchronizationResult;

    synchronizationResult = session.SynchronizeDirectories(SynchronizationMode.Local, sLocalPath, sRemotePath, false, false, SynchronizationCriteria.Time, transferOptions);

    foreach (TransferEventArgs oFile in synchronizationResult.Downloads)

    {

    if (oFile.Error == null)

    {

    if (oFile.FileName == "current.csv")

    {

    continue;

    }

    //File successfully downloaded, remove from source

    RemovalOperationResult removalOperationResult = session.RemoveFiles(session.EscapeFileMask(oFile.FileName));

    if (removalOperationResult.IsSuccess)

    {

    bool fireAgain = true;

    Dts.Events.FireInformation(0, "Downloading Files", string.Format("Successfully removed file from server: {0}", oFile.FileName), String.Empty, 0, ref fireAgain);

    Dts.TaskResult = (int)DTSExecResult.Success;

    }

    else

    {

    Dts.Events.FireError(0, null, string.Format("Error when using WinSCP to remove file: {0}", oFile.FileName), null, 0);

    Dts.TaskResult = (int)DTSExecResult.Failure;

    }

    }

    else

    {

    Dts.Events.FireError(0, null, string.Format("Error when using WinSCP to remove file: {0}", oFile.FileName), null, 0);

    }

    }

    //Close the session

    session.Dispose();

    }

    }

    catch (Exception e)

    {

    Dts.Events.FireError(0, null,

    string.Format("Error when using WinSCP to download file: {0}", e), null, 0);

    Dts.TaskResult = (int)DTSExecResult.Failure;

    }

    Dts.TaskResult = (int)ScriptResults.Success;

    //Dts.TaskResult = (int)ScriptResults.Success;

    }

    #region ScriptResults declaration

    /// <summary>

    /// This enum provides a convenient shorthand within the scope of this class for setting the

    /// result of the script.

    ///

    /// This code was generated automatically.

    /// </summary>

    enum ScriptResults

    {

    Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,

    Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure

    };

    #endregion

    }

    }