Wie kann ich mit meinem SSIS-Paket auf Variablen in meinem C # -Code zugreifen, die ich in Data Flow -> Script Component -> My c # Script verwendet habe?
Ich habe versucht mit was auch nicht funktioniert
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
Der Zugriff auf Paketvariablen in einem Skript Component (einer Datenflusstask) ist nicht identisch mit dem Zugriff auf Paketvariablen in einem Skript Task. Für eine Skriptkomponente müssen Sie zuerst den Script Transformation Editor öffnen (klicken Sie mit der rechten Maustaste auf die Komponente und wählen Sie "Bearbeiten ..."). Im Abschnitt "Benutzerdefinierte Eigenschaften" der Registerkarte "Skript" können Sie die Eigenschaften eingeben (oder auswählen), die Sie dem Skript entweder schreibgeschützt oder schreibgeschützt zur Verfügung stellen möchten: Anschließend stehen die Variablen im Skript selbst als stark typisierte Eigenschaften des Variablenobjekts zur Verfügung:
// 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 ...
}
Eine wichtige Einschränkung: Wenn Sie write für eine Paketvariable benötigen, können Sie dies nur in der PostExecute () - Methode tun.
Bezüglich des Code-Snippets:
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
varCollection
wird auf null initialisiert und niemals auf einen gültigen Wert gesetzt. Daher wird any der Versuch, es zu demeferenzieren, fehlschlagen.
Listen Sie zuerst die Variable auf, die Sie in der Skriptaufgabe unter ReadOnlyVariables im Skriptaufgabeneditor verwenden möchten, und bearbeiten Sie das Skript
So verwenden Sie Ihre ReadOnlyVariables im Skriptcode
String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();
diese Codezeile behandelt die ssis-Paketvariable als Zeichenfolge.
Innerhalb des Codes können Sie nun die Variable als lesen
string myString = Variables.MyVariableName.ToString ();
Ich hatte das gleiche Problem wie das OP, außer ich erinnerte mich an die ReadOnlyVariables.
Nachdem ich ein bisschen herumgespielt hatte, entdeckte ich, dass der Name meiner Variablen das Problem war. "File_Path" in SSIS wurde irgendwie in "FilePath" konvertiert. C # spielt nicht gut mit Unterstrichen in Variablennamen.
Um auf die Variable zuzugreifen, tippe ich
string fp = Variables.FilePath;
In der PreExecute () -Methode der Skriptkomponente.
Das sollte funktionieren:
IDTSVariables100 vars = null;
VariableDispenser.LockForRead("System::TaskName");
VariableDispenser.GetVariables(vars);
string TaskName = vars("System::TaskName").Value.ToString();
vars.Unlock();
Ihrem ursprünglichen Code fehlt der Aufruf der GetVariables () -Methode.
Stark typisierte var scheinen nicht verfügbar zu sein, ich muss Folgendes tun, um Zugriff auf sie zu erhalten:
String MyVar = Dts.Variables["MyVarName"].Value.ToString();