2013-05-17 68 views
1

我正在使用EzAPI通過.NET創建SSIS包,但是當我將現有包加載爲具有現有組件(序列容器和執行SQL任務等)的模板時,EzExec集合爲空,而DTS可執行文件集合有許多成員。我需要將這些現有組件中的一些作爲父母和先決條件引用到我想通過EzAPI添加到包中的任務。SSIS,EzAPI,Template

我是否錯過了包裝的初始化,或者這甚至有可能?

下面是我對去除佈局信息試圖代碼的編輯的樣本,這仍然沒有工作,可執行文件的數量是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

問題是佈局數據拋出API。有關此問題的Codeplex網站的討論。裝幀作品Josh Robinson也發表了他的博客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); 
} 
+0

@billinkc嗨

代碼,非常感謝您的答覆,我想,沒有成功(我以前使用這種方法,但只能保存包時)。我用新的代碼編輯了原文。 – guytz72