2012-11-19 16 views
18

Ich bin neu in SSIS, arbeite an einem Projekt und versuche auf SSIS-Paketvariablen innerhalb meines C# -Codes zuzugreifen, den ich in verwendet habe. Datenfluss -> Skriptkomponente -> Mein C# SkriptZugriff auf SSIS-Paketvariablen in der Skriptkomponente

kann mir jemand dabei helfen?

ich habe auch versucht, mit der auch

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

    XlsFile = varCollection["User::FilePath"].Value.ToString(); 
+1

Was ist der Fehler oder das unerwartete Verhalten, dem Sie begegnen? – billinkc

Antwort

41

Zugriff auf Paketvariablen in einem Script Component (ein Datenflusstask) ist nicht die gleiche Paket Variablen in einem Skript Aufgabe als erreichbar. Für eine Skriptkomponente müssen Sie zuerst die 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 für das Skript verfügbar gemacht werden sollen, entweder auf Lese- oder auf Lese-/Schreibbasis: screenshot of Script Transformation Editor properties page Innerhalb des Skripts selbst

// 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: die Variablen als stark typisierte Eigenschaften der Variablen-Objekt zur Verfügung, wenn Sie Schreib auf eine Paketvariable benötigen, können Sie dies nur tun, in der PostExecute() -Methode.

In Bezug auf den Code-Schnipsel:

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

XlsFile = varCollection["User::FilePath"].Value.ToString(); 

varCollection initialisiert auf null und nie auf einen gültigen Wert gesetzt. So wird jeder Versuch, es zu dereferenzieren, fehlschlagen.

1
  • Auf der Vorderseite Eigenschaften Seite des variablen Skript ändern, um die Readonly (oder Readwrite) Eigenschaft und wählen Sie die Variablen, die Sie interessieren. Dadurch werden die ausgewählten Variablen im Skript Aufgabe
  • im Code können Sie nun Zugriff haben wird die Variable als

    String myString = Variables.MyV lesen ariableName.ToString();

+0

Ist das immer noch korrekt? Ich habe anscheinend keinen Zugriff auf diese Variablen. –

0

Stark var getippt nicht verfügbar zu sein scheinen, ich folgendes tun, um Zugang zu ihnen zu bekommen:

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

+4

Diese Antwort scheint sich auf eine Skriptaufgabe (innerhalb eines Kontrollflusses) zu beziehen, während die Frage sich auf ein Skript _Component_ (innerhalb eines Datenflusses) bezieht. – Sepster

0

Dies sollte funktionieren:

IDTSVariables100 vars = null; 
VariableDispenser.LockForRead("System::TaskName"); 
VariableDispenser.GetVariables(vars); 
string TaskName = vars("System::TaskName").Value.ToString(); 
vars.Unlock(); 

Ihre Anfangscode fehlt Aufruf der GetVariables() -Methode.

0

Ich hatte das gleiche Problem wie das OP, außer ich erinnerte mich, die ReadOnlyVariables zu deklarieren.

Nach etwas herumspielen, entdeckte ich, dass es der Name meiner Variablen war, die das Problem war. "File_Path" in SSIS wurde irgendwie in "FilePath" konvertiert. C# spielt nicht gut mit Unterstrichen in Variablennamen.

So die Variable für den Zugriff auf I

string fp = Variables.FilePath; 

Im PreExecute() -Methode der Skriptkomponente geben.

0

zuerst Liste der Variablen, die Sie wollen, dass sie in Skripttask verwenden, bei Readonly im Skript-Task-Editor und Bearbeiten Sie das Skript

Um die Readonly in Skriptcode

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

diese Codezeile zu verwenden behandelt die Paketvariable ssis als String.

Verwandte Themen