我正在尝试创建现有dtsx文件的副本,以便根据用户的输入更改一些变量。我能够制作文件的副本,查看变量,并将变量设置为正确的输入。但是,当我在Visual Studio中查看该文件时,我会遇到一些错误。
Microsoft Visual Studio无法加载此文档:程序包无法加载到错误0xC0010014"发生了一个或多个错误。在此之前应该有更具体的错误来解释错误的细节。此消息用作遇到错误的函数的返回值"。当CPackage :: LoadFromXML失败时会发生这种情况。
错误列表中包含的错误:
Error 3 Error loading test.dtsx: Error loading value "<DTS:Property xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:Name="PackageFormatVersion">6</DTS:Property>" from node "DTS:Property". E:\test.dtsx 1 1
The version number in the package is not valid. The version number cannot be greater than current version number.
我调查了这些错误,并看到了服务器年和视觉工作室年的潜在问题。这两个都是2008版。 我的代码:
string pkgPath = @"\\server\TestFolder\test.dtsx"
app = new Microsoft.SqlServer.Dts.Runtime.Application();
pkg = app.LoadPackage(pkgPath, null);
Console.WriteLine(pkg.Variables["filename"].Value.ToString());
pkg.Variables["filename"].Value = "testFile";
Console.WriteLine(pkg.Variables["filename"].Value.ToString());
app.SaveToXml(pkgPath, pkg, null);
如果我打开我用来在Visual Studio中制作副本的文件,它就没有问题 - 当我做app.SaveToXML()时会发生奇怪的事情;
任何想法或建议都会很棒。
答案 0 :(得分:2)
要将此作为DTEXEC的流程运行,它看起来如下所示。请查看这两个链接,了解有关ProcessStartInfo以及如何使用/ SET的更多详细信息,以便将其添加到您的参数中。首先从命令行进行测试,因为语法很复杂。
https://technet.microsoft.com/en-us/library/ms162810(v=sql.105).aspx
Using System.Diagnostics;
string args = @"/F'c:\MyPackage.dtsx' /SET'\package.variables[myvariable].Value;myvalue'";
ProcessStartInfo executePackage = new ProcessStartInfo("dtexec", args);
executePackage.UseShellExecute = false;
executePackage.RedirectStandardError = true;
executePackage.RedirectStandardOutput = true;
executePackage.CreateNoWindow = true;
StringBuilder output = new StringBuilder();
Process executing = Process.Start(executePackage);
while(!executing.StandardOutput.EndOfStream)
{
output.AppendLine(executing.StandardOutput.ReadLine();
}
executing.WaitForExit():