wake-up-neo.com

Zugriff auf die Paketvariablen von ssis innerhalb der Skriptkomponente

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();
28
Ashfaq Ahmed

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: screenshot of Script Transformation Editor properties page 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.

52
Edmund Schweppe

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.

3
Adithya Alapati
  • Ändern Sie auf der Eigenschaftsseite des Variablenskripts die Eigenschaft ReadOnlyVariables (oder ReadWriteVariables) und wählen Sie die gewünschten Variablen aus. Dadurch werden die ausgewählten Variablen in der Skriptaufgabe aktiviert
  • 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.

1
Marco Rosas

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.

0
prot

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

0
user2519563