locked
Trying to get the most recent .txt file from a folder using SCRIPT TASK and load the data into sql table. RRS feed

  • Question

  • Can someone please help me fixing this ?

    Here is the C# script I have written in SCRIPT TASK:

    #region

    Namespaces


    using

    System;


    using

    System.Data;


    using

    Microsoft.SqlServer.Dts.Runtime;


    using

    System.Windows.Forms;


    using

    System.IO;


    #endregion



    namespace

    ST_c5b297ad9cda4196835dd4c605162014.csproj

    {  

    ///<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]

    publicpartialclassScriptMain: 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>


    publicvoidMain()

    {

    // TODO: Add your code here


               

    vardirectory = newDirectoryInfo(Dts.Variables["User::FilePath"].Value.ToString());

               

    FileInfo[] files = directory.GetFiles();

               

    DateTimelastModified = DateTime.MinValue;

               

    foreach(FileInfofile infiles)

                {

                   

    if(file.LastWriteTime > lastModified)

                    {

                        lastModified = file.LastWriteTime;

                        Dts.Variables[

    "User::FileName"].Value = file.ToString();

                    }

                }

               

    MessageBox.Show(Dts.Variables["User::FileName"].Value.ToString());

    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>


           

    enumScriptResults


            {

                Success = Microsoft.SqlServer.Dts.Runtime.

    DTSExecResult.Success,

                Failure = Microsoft.SqlServer.Dts.Runtime.

    DTSExecResult.Failure

            };


            #endregion


    }

    }

    I am getting the error below:

     

       at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)

       at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)

       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

       at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)

       at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

    Thursday, September 8, 2016 7:35 PM

Answers

  • Hi sneet7,

    Just as all the people said, figure out the error in your code by adding a BreakPoint then debug your code in Script Task is a quickest way.

    According to my debugging results, the code you provided could work fine if the passed value and referenced variables are correct.

    In this case, please try to check whether the Variable names and the value of variable are correct in your code.

    By the way, you could post your debugging results here, then we could try to resolve this issue according to your debugging results.

    Regards,

    Seif


    Regards, Seif

    • Proposed as answer by Seif Wang Monday, September 19, 2016 2:19 AM
    • Marked as answer by Eric__Zhang Sunday, September 25, 2016 11:42 AM
    Friday, September 9, 2016 10:17 AM

All replies

  • Set a breakpoint in the beginning of the script and step through the code to find where the exception occurs, then report back.
    Thursday, September 8, 2016 7:51 PM
  • In addition to what Jim said, inspect the run time variable values

    Arthur

    MyBlog


    Twitter

    • Proposed as answer by Seif Wang Thursday, September 22, 2016 12:06 PM
    Thursday, September 8, 2016 8:02 PM
  • Setting a breakpoint and stepping through is definitely going to be your quickest option rather than anyone guessing.

    You need to confirm your FilePath is set correctly and is accessible to the user running the script, confirm that file.ToString() actually outputs what you expect, check you've marked FileName as read/write

    Thursday, September 8, 2016 8:16 PM
  • As already mentioned debugging is the best option, in addition to that i saw something

     lastModified = file.LastWriteTime;

                        Dts.Variables[

    "User::FileName"].Value = file.ToString();

    it should be file.name.tostring() i assume though this shouldnt error out what you have either,


    Abhinav http://bishtabhinav.wordpress.com/

    • Proposed as answer by Seif Wang Monday, September 19, 2016 2:19 AM
    Friday, September 9, 2016 1:07 AM
  • Hi sneet7,

    Just as all the people said, figure out the error in your code by adding a BreakPoint then debug your code in Script Task is a quickest way.

    According to my debugging results, the code you provided could work fine if the passed value and referenced variables are correct.

    In this case, please try to check whether the Variable names and the value of variable are correct in your code.

    By the way, you could post your debugging results here, then we could try to resolve this issue according to your debugging results.

    Regards,

    Seif


    Regards, Seif

    • Proposed as answer by Seif Wang Monday, September 19, 2016 2:19 AM
    • Marked as answer by Eric__Zhang Sunday, September 25, 2016 11:42 AM
    Friday, September 9, 2016 10:17 AM