Comment accéder aux variables du paquet ssis à l'intérieur du composant script

Comment puis-je accéder aux variables à l'intérieur de mon code C# que j'ai utilisé dans le flux de données - > Script Component - > My C# Script avec mon paquet SSIS?

j'ai essayé avec ce qui est également ne fonctionne pas

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

XlsFile = varCollection["User::FilePath"].Value.ToString();
25
demandé sur Ryan Gates 2012-11-19 12:49:04

6 réponses

accéder aux variables du paquet dans un Script Composant (d'une tâche de flux de données) n'est pas la même que l'accès à des variables de paquets dans un Script tâche. Pour un Composant de Script, vous devez d'abord ouvrir le Éditeur De Transformation De Script (clic droit sur le composant et sélectionnez "Edit..."). Dans la section Propriétés personnalisées de L'onglet Script, vous pouvez entrer (ou sélectionner) les propriétés que vous voulez mettre à disposition du script, soit en lecture seule, soit en lecture-écriture. base: screenshot of Script Transformation Editor properties page Ensuite, dans le script lui-même, les variables seront disponibles fortement typées propriétés des Variables de l'objet:

// 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 devez écrire à une variable package, vous ne pouvez le faire que dans la méthode PostExecute ().

Concernant 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 ne jamais régler à une valeur valide. Ainsi, tentative de déréférence échouer.

50
répondu Edmund Schweppe 2012-11-19 17:51:29
  • sur la page d'accueil des propriétés de la variable script, 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 script
  • dans le code, vous aurez maintenant accès à la variable

    chaîne myString = Variables.MyVariableName.ToString ();

1
répondu Daryl Wenman-Bateson 2012-11-19 11:12:52

première liste de la Variable que vous voulez utiliser dans la tâche Script à ReadOnlyVariables dans L'éditeur de tâche Script et éditez le Script

Pour utiliser votre ReadOnlyVariables dans le code de script

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

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

1
répondu Adithya Alapati 2018-02-21 11:23:59

fortement tapé var ne semblent pas être disponibles, je dois faire ce qui suit afin d'obtenir l'accès à eux:

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

0
répondu user2519563 2013-12-04 15:12:29

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 manque l'appel de la méthode GetVariables ().

0
répondu prot 2016-11-29 10:42:59

j'ai eu le même problème que L'OP sauf que je me suis souvenu de déclarer les facilement variables.

après quelques jeux, j'ai découvert que c'était le nom de ma variable qui était le problème. "File_Path "dans SSIS a été converti en"FilePath". C# ne joue pas bien avec les underscores dans les noms de variables.

alors pour accéder à la variable, je tape

string fp = Variables.FilePath;

dans la méthode Preexécute () du composant Script.

0
répondu Marco Rosas 2018-02-20 22:43:03