SSIS/C#: Script Task, C# script to look at directory and store the name of 1 file in a variable

后端 未结 1 2034
别那么骄傲
别那么骄傲 2021-01-26 15:06

Basically I\'ve written a C# script for a Script task in SSIS that looks in a User::Directory for 1 csv, if & only if there is one file, it stores that in the instance varia

相关标签:
1条回答
  • 2021-01-26 15:09

    This could simply be done using Foreach loop container as explained in this Stack Overflow question, which was asked by you. :-)

    Anyway, to answer your question with respect to Script Task code that you have provided. Below mentioned reasons could be cause of the issues:

    1. You are looking for .csv. This won't return any results because you are looking for a file with no name but extension .csv. The criteria should be *.csv

    2. If you are looking for exactly one file, then the condition if (numberOfFiles.Length < 2) should be changed to if (numberOfFiles.Length == 1)

    3. The section of code after the if section which extracts the file name should be within the above mentioned if condition and not out side of it. This has to be done to prevent applying substring functionality on an empty string.

    4. Modified code can be found under the Script Task Code section.

    Sorry, I took the liberty to simplify the code a little. I am not suggesting this is the best way to do this functionality but this is merely an answer to the question.

    Hope that helps.

    Script Task Code:

    C# code that can be used only in SSIS 2008 and above.

    /*
       Microsoft SQL Server Integration Services Script Task
       Write scripts using Microsoft Visual C# 2008.
       The ScriptMain is the entry point class of the script.
    */
    using System;
    using System.Data;
    using Microsoft.SqlServer.Dts.Runtime;
    using System.Windows.Forms;
    using System.IO;
    
    namespace ST_3effcc4e812041c7a0fea69251bedc25.csproj
    {
        [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
        public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
        {
            Variables varCollection = null;
            String fileName = string.Empty;
            String fileNameNoExtension = string.Empty;
            String rootDirectory = string.Empty;
            String filePath = string.Empty;
    
            #region VSTA generated code
            enum ScriptResults
            {
                Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
                Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
            };
            #endregion
    
            public void Main()
            {
                Dts.VariableDispenser.LockForRead("User::RootDir");
                Dts.VariableDispenser.LockForWrite("User::ExDFileName");
                Dts.VariableDispenser.GetVariables(ref varCollection);
    
                rootDirectory = varCollection["User::RootDir"].Value.ToString();
                filePath = rootDirectory + @"\SourceData\";
    
                DirectoryInfo YDGetDir = new DirectoryInfo(filePath);
                FileInfo[] numberOfFiles = YDGetDir.GetFiles("*.csv");
    
                if (numberOfFiles.Length == 1)
                {
                    fileName = numberOfFiles[0].ToString();
                    fileNameNoExtension = fileName.Substring(0, fileName.LastIndexOf("."));
                }
                if (!String.IsNullOrEmpty(fileNameNoExtension))
                {
                    varCollection["User::ExDFileName"].Value = fileNameNoExtension;
                }
    
                Dts.TaskResult = (int)ScriptResults.Success;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题