我使用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");
答案 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);
}