c# - read - Cómo acceder a las variables del paquete ssis dentro del componente de script
ssis script component read variables c# (6)
¿Cómo puedo acceder a las variables dentro de mi código C # que he usado en Flujo de datos -> Componente de script -> Mi script de c # con mi paquete SSIS?
He intentado con el que tampoco está funcionando
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
Acceder a las variables del paquete en un componente de secuencia de comandos (de una tarea de flujo de datos) no es lo mismo que acceder a las variables del paquete en una tarea de secuencia de comandos. 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 pestaña Script, puede ingresar (o seleccionar) las propiedades que desea poner a disposición del script, ya sea de solo lectura o de lectura y escritura: Luego, dentro del propio script, las variables estarán disponibles como propiedades fuertemente tipadas 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 ().
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 en nulo y nunca se establece en un valor válido. Por lo tanto, cualquier intento de desreferirlo fallará.
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 llamada del método GetVariables ().
Las var. Fuertemente tipadas no parecen estar disponibles, tengo que hacer lo siguiente para tener acceso a ellas:
String MyVar = Dts.Variables["MyVarName"].Value.ToString();
Primero, enumere la variable que desea usar en la tarea Script en ReadOnlyVariables en el editor de tareas Script y edite el script
Para usar tus ReadOnlyVariables en el código de script
String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();
esta línea de código tratará la variable del paquete ssis como una cadena.
Tuve el mismo problema que el OP, excepto que recordé declarar 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 juega 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 de script.
- En la página de propiedades frontal 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 del script
Dentro del código ahora tendrá acceso para leer la variable como
cadena myString = Variables.MyVariableName.ToString ();