Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Définir dynamiquement le code de la tâche de script dans SSIS 2012

Comme vous l'avez remarqué, le Méthodes d'assistance VSTA que vous pouviez utiliser en 2008 ont été déplacés/supprimés en 2012. Il est toujours possible de le faire, mais le code a changé.

La chose la plus simple à faire est de charger un projet existant en utilisant VstaHelper.LoadProjectFromFolder ().

Si vous souhaitez ajouter dynamiquement des fichiers de script, consultez l'extrait ci-dessous. Il y a deux choses principales que vous devez garder à l'esprit :

Les classes ScriptingEngine et VstaHelper représentent VSTA lui-même. C'est là que vous créeriez le projet et ajouteriez de nouveaux fichiers. Vous ne pouvez pas supprimer ou remplacer un fichier existant directement ici. Lorsque vous appelez SaveProjecToStorage(), c'est comme si vous fermiez la fenêtre VSTA… cela enregistre le projet et le binaire compilé dans la ScriptTask.

ScriptTask.ScriptStorage vous permet de manipuler directement le contenu du fichier source. De là, vous pouvez modifier le contenu d'un fichier.

L'extrait de code suivant devrait vous aider à démarrer.

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