Cómo acceder a las variables de paquete ssis dentro del componente script


¿Cómo puedo acceder a las variables dentro de mi código C# que he utilizado en Flujo de datos -> Componente Script - > Mi Script c# con mi paquete SSIS?

He intentado con lo que tampoco está funcionando

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

XlsFile = varCollection["User::FilePath"].Value.ToString();
Author: Ryan Gates, 2012-11-19

6 answers

Acceder a variables de paquete en un Componente de Script (de una Tarea de Flujo de datos) no es lo mismo que acceder a variables de paquete en una Tarea de Script . Para un componente de Script, primero debe abrir el Editor de Transformación de Script (haga clic con el botón derecho en el componente y seleccione "Editar"..."). En la sección Propiedades personalizadas de la ficha Script, puede introducir (o seleccionar) las propiedades que desea poner a disposición del script, ya sea de solo lectura o de lectura y escritura: captura de pantalla de la página de propiedades del Editor de Transformación de Scripts Entonces, dentro del propio script, las variables estarán disponibles como propiedades fuertemente tipeadas del objeto Variables:

// 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 ...
}

Una advertencia importante: si necesita escribir en una variable de paquete, solo puede hacerlo en el método postExecute ().

Con respecto al fragmento de código:

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

XlsFile = varCollection["User::FilePath"].Value.ToString();

varCollection se inicializa a null y nunca se establece en un valor válido. Por lo tanto, cualquier intento de desreferenciar fallará.

 50
Author: Edmund Schweppe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-19 17:51:29
  • En la página de propiedades del script de variables, modifique la propiedad ReadOnlyVariables (o ReadWriteVariables) y seleccione las variables que le interesan. Esto habilitará las variables seleccionadas dentro de la tarea script
  • Dentro del código, ahora tendrá acceso a leer la variable como

    String myString = Variables.Mi nombre variable.toString ();

 1
Author: Daryl Wenman-Bateson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-19 11:12:52

Primero Enumere la variable que desea usar en la tarea de Script en ReadOnlyVariables en el editor de tareas de Script y Edite el Script

Para usar tus ReadOnlyVariables en código script

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

Esta línea de código tratará la variable de paquete ssis como una cadena.

 1
Author: Adithya Alapati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-21 11:23:59

Los var fuertemente tipeados no parecen estar disponibles, tengo que hacer lo siguiente para obtener acceso a ellos:

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

 0
Author: user2519563,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-04 15:12:29

Esto debería funcionar:

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

Su código inicial carece de la llamada del método GetVariables ().

 0
Author: prot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 10:42:59

Tuve el mismo problema que el OP excepto que recordé declarar las ReadOnlyVariables.

Después de jugar un poco, descubrí que el problema era el nombre de mi variable. "File_Path" en SSIS de alguna manera se convirtió a "FilePath". C# no funciona bien con guiones bajos en nombres de variables.

Así que para acceder a la variable, escribo

string fp = Variables.FilePath;

En el método PreExecute() del Componente Script.

 0
Author: Marco Rosas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-20 22:43:03