sql >> Database >  >> RDS >> Sqlserver

Scripttaakcode dynamisch instellen in SSIS 2012

Zoals je hebt opgemerkt, is de VSTA-hulpmethoden die je kon gebruiken in 2008 werden verplaatst/verwijderd in 2012. Het is nog steeds mogelijk om te doen, maar de code is veranderd.

Het gemakkelijkste is om een ​​bestaand project te laden met VstaHelper.LoadProjectFromFolder ().

Zie het onderstaande fragment als u dynamisch scriptbestanden wilt toevoegen. Er zijn twee belangrijke dingen die u in gedachten moet houden:

De klassen ScriptingEngine en VstaHelper vertegenwoordigen VSTA zelf. Dit is waar u het project zou maken en nieuwe bestanden zou toevoegen. U kunt hier niet rechtstreeks een bestaand bestand verwijderen of vervangen. Wanneer u SaveProjecToStorage() aanroept, is het alsof u het VSTA-venster sluit … het slaat het project op en wordt binair gecompileerd in de ScriptTask.

Met ScriptTask.ScriptStorage kunt u de inhoud van het bronbestand rechtstreeks manipuleren. Vanaf hier kunt u de inhoud van een bestand wijzigen.

Het volgende codefragment zou u op weg moeten helpen.

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. Kan één query uit twee query's worden uitgevoerd?

  2. FOREIGN KEY verwijst naar de kolom van dezelfde tabel. Kan geen waarden invoegen

  3. Vind index van het laatste voorkomen van een subtekenreeks met behulp van T-SQL

  4. 3 manieren om de maand uit een datum te extraheren in SQL Server (T-SQL)