问题描述
在我的应用程序,是动态创建的脚本任务。
In my application, a script task is created dynamically.
在SQL Server 2008中的实现SSIS的,下面的方法工作得很好。
In SQL Server 2008's implementation of SSIS, the following method worked fine.
private void SetSourceCode(ScriptTask scriptTask, string code, string codeName)
{
string fileName = "ScriptMain.vb";
string language = "VisualBasic";
string proj = ".vbproj";
scriptTask.ScriptLanguage = VSTAScriptLanguages.GetDisplayName(language);
scriptTask.ScriptingEngine.InitNewScript(language,
scriptTask.ScriptProjectName, proj);
scriptTask.ScriptingEngine.ShowDesigner(false);
scriptTask.ScriptingEngine.AddCodeFile(fileName, code);
if (!scriptTask.ScriptingEngine.Build())
throw new Exception("Failed to build vb script code: " + codeName);
scriptTask.ScriptingEngine.SaveScriptToStorage();
if (!scriptTask.ScriptingEngine.CloseIDE(false))
{
throw new Exception("Unable to close Scripting engine.");
}
}
我怎么这个代码迁移到SQL Server 2012中,因为下面的方法从SQL Server中删除2012 DLL-S(组件):
How do I migrate this code to SQL Server 2012, because following methods are removed from SQL Server 2012 dll-s (assemblies):
- InitNewScript
- AddProjectReference
- AddCodeFile
- SaveScriptToStorage
- CloseIDE
- 构建
- ShowDesigner
- InitNewScript
- AddProjectReference
- AddCodeFile
- SaveScriptToStorage
- CloseIDE
- Build
- ShowDesigner
一般情况下,在SQL Server 2012中的脚本任务我怎么动态设置源代码?
Generally, how do I dynamically set source code for script task in SQL Server 2012?
推荐答案
正如您所注意到的的你可以在2008年使用方法进行移动/在2012年去掉它仍然是可能的这样做,但代码已经改变。
As you've noticed, the VSTA helper methods you could use in 2008 were moved/removed in 2012. It is still possible to do, but the code has changed.
做最简单的就是使用的()。
The easiest thing to do is load an existing project using VstaHelper.LoadProjectFromFolder().
如果你想动态添加脚本文件,请参见下面的代码片段。有你需要记住两件事:
If you want to dynamically add script files, see the snippet below. There are two main things you need to keep in mind:
ScriptingEngine和VstaHelper类代表VSTA本身。在这里,你会创建项目,并添加新的文件。您不能删除或直接在这里替换现有文件。当你调用SaveProjecToStorage(),它就像关闭VSTA窗口...它保存项目和编译的二进制到ScriptTask。
The ScriptingEngine and VstaHelper classes represent VSTA itself. This is where you’d create the project, and add new files. You cannot remove or replace an existing file directly here. When you call SaveProjecToStorage(), it's like closing the VSTA window … it saves the project and compiled binary to the ScriptTask.
ScriptTask.ScriptStorage允许你直接操作源文件的内容。从这里,你可以修改一个文件的内容。
ScriptTask.ScriptStorage allows you to directly manipulate the source file contents. From here, you can modify the content of a file.
下面的代码片段应该帮助您开始。
The following code snippet should help you get started.
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);
}
这篇关于动态设置脚本任务代码2012 SSIS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!