SSIS脚本任务获取文件名和文件存储到SSIS对象变量(SSIS Script Task Get F

2019-06-26 16:12发布

我想建立将在一个标准化的文件系统归档过程中使用的SSIS包。 基本上,我就能将信息添加到一个配置表,然后使用此表中指定的文件夹归档某些文件。 我的问题是,很多的文件具有动态命名,所以我需要把所有文件的列表,然后查询以决定哪些文件,我应该是感人。

不是一个C#/ VB程序员试图脚本包的争夺在指定的网络目录中的所有文件,然后喂这些文件名回的SSIS对象变量的部分时,引起了我的一些问题。

我有一个字符串变量“用户:: SourceNetworkFolderName”将包含我想从读取所有文件的文件夹的UNC位置。 我想,然后回传给所有这些文件名(扩展),以所谓的“用户:: SourceFilesInTheDirectory”的SSIS对象变量。 一旦我有文件名列表到对象变量,我要他们foreach循环到一个SQL表。

有没有人对我如何去获得所有文件名的列表,从我的变量目录到我的SSIS对象变量任何具体的建议?

先感谢您!

编辑:这是我更新的代码:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Collections.Generic;
using System.Data.SqlClient;

namespace ST_f5e4ae71f14d40d8811af21fa2a9a622.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {

        #region VSTA generated code
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

        public void Main()
        {
        //Setup Connection String to SQL
            SqlConnection SQLConnection = new SqlConnection(
                                       //"user id=username;" +                  //UserName
                                       //"password=password;" +                 //Password
                                       "Trusted_Connection=true;" +             //Windows Auth
                                       "server=SERVERNAME;" +                   //SQL Server
                                       "database=DATABASENAME; " +              //SQL Database
                                       "connection timeout=30;" +               //connection timeout
                                       "Network Library=dbmssocn");             //TCP/IP Connection ("dbnmpntw" = Name Pipes)


        //Open the SQL Connection and remove the error code
            try
            {
                SQLConnection.Open();
            }
            catch (Exception OpenConnectionError)
            {
                Console.WriteLine(OpenConnectionError.ToString());
            }


        //Fetch a list of files from 'SourceNetworkFolderName' SSIS variable to an array called array1.
            string[] ArrayFileName = Directory.GetFiles(Dts.Variables["SourceNetworkFolderName"].Value.ToString());


        //Set up sql variable for table population
            SqlParameter SQLFileNameParam = new SqlParameter("@FileName", SqlDbType.VarChar, 100);


        //Loop through the array and insert into an SQL table
            foreach (string strFileName in ArrayFileName)
            {
            //Update sql variable with file names from array
                SQLFileNameParam.Value = strFileName;
            //Make the table insert
                SqlCommand SQLInsertToTable = new SqlCommand("INSERT INTO Archive_Extract_Network_Folder_File_List (FileName) VALUES (@FileName)", SQLConnection);
            //This snippit allows the use of the variable in the sql script.
                SQLInsertToTable.Parameters.Add(SQLFileNameParam);
            //Execute SqlCommand
                SQLInsertToTable.ExecuteNonQuery();
            //Clear the parameters and set the object to null    
                SQLInsertToTable.Parameters.Clear();
                SQLInsertToTable = null;
            }


        //Close the SQL Connection and remove the error code
            try
            {
                SQLConnection.Close();
            }
            catch (Exception CloseConnectionError)
            {
                Console.WriteLine(CloseConnectionError.ToString());
            }


        //Set array to null since it is no longer required.
            ArrayFileName = null;


        //Exit on success
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }
}

Answer 1:

里面你的脚本,只是生成的文件名的数组,并设置数组您的变量(确保变量被设置在脚本任务写入)。 如果变量类型的对象,你可以在上面用在后续的任务循环然后循环,做任何你想用的文件。 你不应该需要只在一个脚本上的任何奇迹的工作。

把所有文件的源代码目录下的一个数组:

string[] array1 = Directory.GetFiles(Dts.Variables("SourceNetworkFolderName").Value.ToString());

把所有的文件在一个阵列的“BIN”的延伸:

string[] array2 = Directory.GetFiles(Dts.Variables("SourceNetworkFolderName").Value.ToString(), "*.BIN");

您可能需要包括System.IO在你的脚本代码的顶部。

编辑

要由循环任务数组转换成列表进行处理。 调用上面的代码后,调用此:

List<string> fileList = new List<string>(astrTest);
Dts.Variables["SourceFilesInTheDirectory"].Value = fileList;

您将需要包括System.Collections.Generic在脚本文件的开头。



文章来源: SSIS Script Task Get File Names and Store to an SSIS Object Variable