web-dev-qa-db-fra.com

Comment accéder aux variables de package ssis dans le composant de script

Comment puis-je accéder aux variables du code C # que j'ai utilisées dans Data Flow -> Composant de script -> Mon script c # avec mon package SSIS?

J'ai essayé avec qui ne fonctionne pas non plus

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

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

L'accès aux variables de package dans un script composant (d'une tâche de flux de données) diffère de l'accès aux variables de package dans un script tâche. Pour un composant de script, vous devez d'abord ouvrir Éditeur de transformation de script (cliquez avec le bouton droit de la souris sur le composant et sélectionnez "Modifier ..."). Dans la section Propriétés personnalisées de l'onglet Script, vous pouvez entrer (ou sélectionner) les propriétés que vous souhaitez rendre disponibles pour le script, en lecture seule ou en lecture-écriture: screenshot of Script Transformation Editor properties page Ensuite, dans le script lui-même, les variables seront disponibles en tant que propriétés fortement typées de l'objet 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 ...
}

Une mise en garde importante: si vous avez besoin de write dans une variable de package, vous ne pouvez le faire que dans la méthode PostExecute ().

En ce qui concerne l'extrait de code:

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

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

varCollection est initialisé à null et n'est jamais défini sur une valeur valide. Ainsi, any essaiera de le déréférencer.

52
Edmund Schweppe

Commencez par répertorier la variable que vous souhaitez utiliser dans la tâche de script sous ReadOnlyVariables dans l'éditeur de tâche de script, puis modifiez le script

Pour utiliser vos ReadOnlyVariables dans le code de script 

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

cette ligne de code traitera la variable de package ssis comme une chaîne.

3
Adithya Alapati
  • Sur la page de propriétés avant du script de variable, modifiez la propriété ReadOnlyVariables (ou ReadWriteVariables) et sélectionnez les variables qui vous intéressent. Cela activera les variables sélectionnées dans la tâche de script
  • Dans le code, vous aurez maintenant accès à lire la variable en tant que 

    string myString = Variables.MyVariableName.ToString ();

1

J'ai eu le même problème que l'OP sauf que je me suis souvenu de déclarer les ReadOnlyVariables. 

Après quelques jeux, j'ai découvert que c'était le nom de ma variable qui était en cause. "File_Path" dans SSIS s'est en quelque sorte converti en "FilePath". C # ne joue pas bien avec les traits de soulignement dans les noms de variables.

Donc, pour accéder à la variable, je tape

string fp = Variables.FilePath;

Dans la méthode PreExecute () du composant de script.

1
Marco Rosas

Cela devrait fonctionner: 

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

Votre code initial n'a pas d'appel de la méthode GetVariables ().

0
prot