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