1

我正在使用 EzAPI 通过 .NET 创建 SSIS 包,但是当我将现有包加载为具有现有组件(序列容器和执行 SQL 任务等)的模板时,EzExec 集合为空,而 DTS Executables 集合有很多成员. 我需要引用其中一些现有组件作为我想通过 EzAPI 添加到包中的任务的父项和先例。

我是否在包的初始化中遗漏了一些东西,或者这甚至可能吗?

下面是我尝试删除布局信息的代码的编辑示例,这仍然不起作用,可执行文件的计数为 7,EzExexs 的计数为 0。

谢谢,安德鲁

public static EzPackage loadPackageTemplate(string templateLocation)
{
    EzPackage ezPackage = new EzPackage();
    try
    {
        StreamReader s = new StreamReader(templateLocation);
        string templateContents = s.ReadToEnd();
        s.Close();

        templateContents = removeLayoutInformation(templateContents);
        ezPackage.LoadFromXML(templateContents);
    }
    catch (Exception)
    {
        throw;
    }

    //need to remove layout from template
    return ezPackage;
}

public static string removeLayoutInformation(string strXML)
{
    try
    {
        //Remove the layout information.
        while (strXML.IndexOf("<DTS:PackageVariable>") > -1)
        {
            strXML = strXML.Remove(strXML.IndexOf("<DTS:PackageVariable>"), strXML.IndexOf("</DTS:PackageVariable>") - strXML.IndexOf("<DTS:PackageVariable>") + 22);
        }
    }
    catch (Exception)
    {
        throw;
    }

    return strXML;
}

public static EzExecutable GetExecutable(EzPackage ezPac, string identifier)
{
    EzExecutable toReturn = null;

    foreach (EzExecutable ezEx in ezPac.EzExecs)
    {
        if (ezEx.EzName == identifier)
        {
            toReturn = ezEx;
            break;
        }
    }

    return toReturn;
}

EzPackage pac = SSISGen.loadPackageTemplate(@"C:\Temp\SSISPackageTemplates\LoadFact.dtsx");
4

1 回答 1

1

问题是布局数据抛出了 API。Codeplex网站上有一个讨论这个问题。装腔作势的乔什·罗宾逊也在博客中讲述了他的经历

无论如何,关于 SSIS 的疯狂之处,BIDS/SSDT 呈现的布局内容被固定在实际的包标记上。这会干扰 ezapi 的东西,所以解决方法是像 Josh 演示的那样将其剥离。

此处复制代码以供将来保存

//Save the package object to XML
string strXML = null;
strXML = TestPackage.SaveToXML();

//Count instances of existing SSIS layout code in package.
int LayoutCount = Regex.Matches(strXML, "<DTS:PackageVariable>").Count;

//Remove the layout information.
for (int i = 0; i < LayoutCount; i++)
{
    strXML = strXML.Remove(strXML.IndexOf("<DTS:PackageVariable>"), strXML.IndexOf("</DTS:PackageVariable>") - strXML.IndexOf("<DTS:PackageVariable>") + 22);
}
于 2013-05-17T17:52:06.373 回答