2012-11-19 15 views
18

Sono nuovo in SSIS, sto lavorando su un progetto e sto provando ad accedere alle variabili del pacchetto SSIS all'interno del mio codice C# che ho usato in Flusso di dati -> Script Component -> My C# ScriptCome accedere alle variabili del pacchetto ssis all'interno del componente script

qualcuno può aiutare in questo?

Anche io ho provato con la quale non sta lavorando anche

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

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

Qual è l'errore o il comportamento imprevisto che si sta verificando? – billinkc

risposta

41

Accesso variabili del pacchetto in uno script componente (di un Flusso di dati) non è la stessa di accesso variabili del pacchetto in uno script Task. Per un componente script, è necessario prima aprire lo Script Transformation Editor (fare clic con il tasto destro del mouse sul componente e selezionare "Modifica ..."). Nella sezione Proprietà personalizzate della scheda Script, è possibile immettere (o selezionare) le proprietà che si desidera rendere disponibili per lo script, in sola lettura o in lettura-scrittura: screenshot of Script Transformation Editor properties page Quindi, all'interno dello script stesso, le variabili saranno disponibili proprietà come fortemente tipizzato delle variabili oggetto:

// 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 ... 
} 

un importante avvertimento: se avete bisogno di scrittura ad una variabile pacchetto, è possibile farlo solo nel metodo postExecute().

Per quanto riguarda il frammento di codice:

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

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

varCollection viene inizializzato a null e mai impostato su un valore valido. Pertanto, qualsiasi tentativo di dereferenziazione non riuscirà a.

1
  • Nella pagina delle proprietà anteriori della sceneggiatura variabile, modificare le ReadOnlyVariables (o ReadWriteVariables) proprietà e selezionare le variabili a cui è interessato. Ciò consentirà le variabili selezionate all'interno l'attività di script
  • al codice si avranno ora accesso a leggere la variabile come

    stringa myString = Variables.MyV ariableName.ToString();

+0

È ancora corretto? Non sembra che abbia accesso a queste variabili –

0

fortemente tipizzato var non sembra essere disponibile, devo fare quanto segue al fine di ottenere l'accesso ad essi:

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

+4

Questa risposta sembra appartenere a un'attività Script (all'interno di un flusso di controllo), mentre la domanda riguarda uno Script _Componente_ (all'interno di un flusso di dati). – Sepster

0

questo dovrebbe funzionare:

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

tuo il codice iniziale manca della chiamata del metodo GetVariables().

0

Ho avuto lo stesso problema dell'OP tranne che mi sono ricordato di dichiarare ReadOnlyVariables.

Dopo aver giocato un po ', ho scoperto che era il nome della mia variabile il problema. "File_Path" in SSIS è stato convertito in "FilePath". C# non funziona bene con trattini bassi nei nomi delle variabili.

Quindi, per accedere alla variabile, tipo I

string fp = Variables.FilePath; 

Nel metodo PreExecute() del componente script.

0

prima lista la variabile che si desidera utilizzarli in attività Script al ReadOnlyVariables nell'editor attività Script e modificare lo script

Per utilizzare le ReadOnlyVariables nel codice di script

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

questa riga di codice tratterà la variabile del pacchetto ssis come una stringa.