SSIS,EzAPI,模板

时间:2013-05-17 15:29:12

标签: ssis ezapi

我使用EzAPI通过.NET创建SSIS包,但是当我将现有包加载为具有现有组件(序列容器和执行SQL任务等)的模板时,EzExec集合为空,而DTS可执行文件集合有很多成员。我需要引用其中一些现有组件作为我希望通过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");

1 个答案:

答案 0 :(得分:1)

问题是布局数据会抛弃API。有Codeplex网站讨论此问题。这位装腔作势的乔希罗宾逊也在博客上写了他的experience

无论如何,关于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);
}