visual studio-更改C#中的SSIS包导致LoadFromXML失败

本文关键字:包导致 LoadFromXML 失败 SSIS 中的 studio- 更改 visual | 更新日期: 2023-09-27 18:01:13

我正试图创建一个现有dtsx文件的副本,以便根据用户的输入更改一些变量。我可以复制文件,查看变量,并将变量设置为正确的输入。但是,当我在VisualStudio中查看该文件时,会出现一些错误。

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.

我调查了这些错误,发现了服务器年和visual studio年的潜在问题。这两个都是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);

如果我在VisualStudio中打开我用来复制的文件,它不会有问题——当我做应用程序时,会发生一些奇怪的事情。SaveToXML((;

任何想法或建议都将是美妙的。

visual studio-更改C#中的SSIS包导致LoadFromXML失败

要从DTEXEC将其作为进程运行,它看起来如下所示。请查看这两个链接,了解有关ProcessStartInfo以及如何使用/SET的更多详细信息,以便将其添加到参数中。首先从命令行测试,因为语法可能很挑剔。

  • https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo(v=vs.110(.aspx
  • 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():