sql >> Databasteknik >  >> RDS >> Sqlserver

Ställ in skriptuppgiftskod dynamiskt i SSIS 2012

Som du har märkt är VSTA-hjälpmetoder du kan använda under 2008 flyttades/togs bort 2012. Det är fortfarande möjligt att göra, men koden har ändrats.

Det enklaste du kan göra är att ladda ett befintligt projekt med VstaHelper.LoadProjectFromFolder ().

Om du vill lägga till skriptfiler dynamiskt, se utdraget nedan. Det finns två huvudsakliga saker du måste tänka på:

Klasserna ScriptingEngine och VstaHelper representerar VSTA själv. Det är här du skapar projektet och lägger till nya filer. Du kan inte ta bort eller ersätta en befintlig fil direkt här. När du anropar SaveProjecToStorage(), är det som att stänga VSTA-fönstret ... det sparar projektet och den kompilerade binära filen till ScriptTask.

ScriptTask.ScriptStorage låter dig direkt manipulera källfilens innehåll. Härifrån kan du ändra innehållet i en fil.

Följande kodavsnitt bör hjälpa dig att komma igång.

static void Main(string[] args)
{
    // 1. Create new package, and add a script task
    var pkg = new Package();
    var exec = pkg.Executables.Add("STOCK:ScriptTask");
    var th = (TaskHost)exec;
    th.Name = "Script Task";
    th.Description = "This is a Script Task";
    var task = (ScriptTask)th.InnerObject;

    // 2. Set the script language - "CSharp" or "VisualBasic"
    task.ScriptLanguage = VSTAScriptLanguages.GetDisplayName("CSharp");

    // 3. Set any variables used by the script
    //task.ReadWriteVariables = "User::Var1, User::Var2";

    // 4. Create a new project from the template located in the default path
    task.ScriptingEngine.VstaHelper.LoadNewProject(task.ProjectTemplatePath, null, "MyScriptProject");

    // 5. Initialize the designer project, add a new code file, and build
    //task.ScriptingEngine.VstaHelper.Initalize("", true);
    //task.ScriptingEngine.VstaHelper.AddFileToProject("XX.cs", "FileContents");
    //task.ScriptingEngine.VstaHelper.Build("");

    // 6. Persist the VSTA project + binary to the task
    if (!task.ScriptingEngine.SaveProjectToStorage())
    {
        throw new Exception("Save failed");
    }

    // 7. Use the following code to replace the ScriptMain contents
    var contents = File.ReadAllText("path to file");
    var scriptFile =
        task.ScriptStorage.ScriptFiles["ScriptMain.cs"] =
        new VSTAScriptProjectStorage.VSTAScriptFile(VSTAScriptProjectStorage.Encoding.UTF8, contents);


    // 8. Reload the script project, build and save
    task.ScriptingEngine.LoadProjectFromStorage();
    task.ScriptingEngine.VstaHelper.Build("");

    // 9. Persist the VSTA project + binary to the task
    if (!task.ScriptingEngine.SaveProjectToStorage())
    {
        throw new Exception("Save failed");
    }

    // 10. Cleanup
    task.ScriptingEngine.DisposeVstaHelper();

    // 11. Save
    string xml;
    pkg.SaveToXML(out xml, null);

    File.WriteAllText(@"c:\temp\package.dtsx", xml);
}



  1. Skapa sql-tabell från dask-dataram med map_partitions och pdf.df.to_sql

  2. Hur kan jag hitta alla syskon till min nod och dess ankare i ett hierarkiskt kategoriträd?

  3. GETDATE() Exempel i SQL Server (T-SQL)

  4. Hur man jämför två scheman i PostgreSQL