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();
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: 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.
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.
Dans le code, vous aurez maintenant accès à lire la variable en tant que
string myString = Variables.MyVariableName.ToString ();
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.
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 ().