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();
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: 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á.
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 ();
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.
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();
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 ().
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.
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