How to access ssis package variables inside script component

前端 未结 6 1703
旧巷少年郎
旧巷少年郎 2020-11-27 20:58

How can I access variables inside my C# code which I\'ve used in Data Flow -> Script Component - > My c# Script with my SSIS package?

I have tried with which is also

相关标签:
6条回答
  • 2020-11-27 21:05

    This should work:

    IDTSVariables100 vars = null;
    VariableDispenser.LockForRead("System::TaskName");
    VariableDispenser.GetVariables(vars);
    string TaskName = vars("System::TaskName").Value.ToString();
    vars.Unlock();
    

    Your initial code lacks call of the GetVariables() method.

    0 讨论(0)
  • 2020-11-27 21:12

    First List the Variable that you want to use them in Script task at ReadOnlyVariables in the Script task editor and Edit the Script

    To use your ReadOnlyVariables in script code

    String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();
    

    this line of code will treat the ssis package variable as a string.

    0 讨论(0)
  • 2020-11-27 21:13

    Accessing package variables in a Script Component (of a Data Flow Task) is not the same as accessing package variables in a Script Task. For a Script Component, you first need to open the Script Transformation Editor (right-click on the component and select "Edit..."). In the Custom Properties section of the Script tab, you can enter (or select) the properties you want to make available to the script, either on a read-only or read-write basis: screenshot of Script Transformation Editor properties page Then, within the script itself, the variables will be available as strongly-typed properties of the Variables object:

    // Modify as necessary
    public override void PreExecute()
    {
        base.PreExecute();
        string thePath = Variables.FilePath;
        // Do something ...
    }
    
    public override void PostExecute()
    {
        base.PostExecute();
        string theNewValue = "";
        // Do something to figure out the new value...
        Variables.FilePath = theNewValue;
    }
    
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        string thePath = Variables.FilePath;
        // Do whatever needs doing here ...
    }
    

    One important caveat: if you need to write to a package variable, you can only do so in the PostExecute() method.

    Regarding the code snippet:

    IDTSVariables100 varCollection = null;
    this.VariableDispenser.LockForRead("User::FilePath");
    string XlsFile;
    
    XlsFile = varCollection["User::FilePath"].Value.ToString();
    

    varCollection is initialized to null and never set to a valid value. Thus, any attempt to dereference it will fail.

    0 讨论(0)
  • 2020-11-27 21:17

    I had the same problem as the OP except I remembered to declare the ReadOnlyVariables.

    After some playing around, I discovered it was the name of my variable that was the issue. "File_Path" in SSIS somehow got converted to "FilePath". C# does not play nicely with underscores in variable names.

    So to access the variable, I type

    string fp = Variables.FilePath;
    

    In the PreExecute() method of the Script Component.

    0 讨论(0)
  • 2020-11-27 21:17
    • On the front properties page of the variable script, amend the ReadOnlyVariables (or ReadWriteVariables) property and select the variables you are interested in. This will enable the selected variables within the script task
    • Within code you will now have access to read the variable as

      string myString = Variables.MyVariableName.ToString();

    0 讨论(0)
  • 2020-11-27 21:20

    Strongly typed var don't seem to be available, I have to do the following in order to get access to them:

    String MyVar = Dts.Variables["MyVarName"].Value.ToString();

    0 讨论(0)
提交回复
热议问题