簡體   English   中英

SSIS腳本任務-不支持接口

[英]SSIS Script Task - No Interface Supported

目的 :我有一個帶有各種包的SSIS解決方案,由於它們具有不同的結構,因此目前每個表中都有一個包創建了這些包中的一組。 目的是創建一個模板包(完成),更新變量/表名(完成),重新初始化和重新映射列,為每個表執行包。

問題 :因此,正如您所知道的,我已經到了需要重新初始化的地步,但是我無法執行數據流任務並繼續出現此錯誤:

No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))

當我運行此代碼時:

    //// Get Data Flow task 
    TaskHost tHost = pkgOut.Executables[0] as TaskHost;
    MainPipe dataFlowTask = (MainPipe)tHost.InnerObject;

我正在使用的代碼如下:

    public void Main()
    {
        // Set Project Variables
        List<string> pkgVars = new List<string>
        {
            @"pPR_SSIS_Catalog_Server",
            @"pPR_SSIS_Catalog_Project",
            @"pPR_SSIS_Catalog_Folder"
        };

        // Get Package
        String pkgLocation = @"C:\PATH\TO\TEMPLATE\PACKAGE\a_Load_SAP_Template.dtsx";
        Application app = new Application();
        Package pkgIn = app.LoadPackage(pkgLocation, null);
        String pkgName = "DynamicPackage";

        // Add Connections (cos they're project connections and aren't stored in package)
        ConnectionEnumerator allConns = Dts.Connections.GetEnumerator();
        while ((allConns.MoveNext()) && (allConns.Current != null))
            pkgIn.Connections.Join(allConns.Current);

        // Convert new package to XML so we can cheat and just do a find and replace
        XmlDocument pkgXML = new XmlDocument();
        pkgIn.SaveToXML(ref pkgXML, null, null);

        // Replace strings
            // Set SAP table
            String pkgStr = pkgXML.OuterXml.ToString();
            pkgStr = pkgStr.Replace("#SAP_SRC_TABLE#", "MyF-ingSAPTables"); // Replace SAP Table Name

            // Set Project Variables references == values  -- REMEMBER TO CHECK FOR INT PARAMS zzz
            foreach (string var in pkgVars)
                pkgStr = pkgStr.Replace(@"@[$Project::" + var + @"]", @"""" + Convert.ToString(Dts.Variables[var].Value) + @"""");

        // Convert back to XML
        XmlDocument newXML = new XmlDocument();
        newXML.LoadXml(pkgStr);
        Package pkgOut = new Package();
        pkgOut.LoadFromXML(newXML, null);

        //// Get Data Flow task 
        TaskHost tHost = pkgOut.Executables[0] as TaskHost;
        MainPipe dataFlowTask = (MainPipe)tHost.InnerObject; // THIS IS WHERE THE CODE ERRORS

        new Application().SaveToXml(String.Format(@"D:\PATH\TO\SAVE\LOCATION\{0}.dtsx", pkgName), pkgOut, null);

        Dts.TaskResult = (int)ScriptResults.Success;

    }

我努力了:

  • 刪除除數據流以外的所有內容
  • 重新創建空白數據流
  • 重新制作包裝
  • 在腳本中制作了一個程序包並創建了數據流(此方法有效,但是當我打開程序包時,數據流沒有出現...可能添加了錯誤,但在運行TaskHost部分時可以看到它)

我不確定我還能嘗試什么,我已經看到了可能需要重新注冊一些.dll的信息,但是我沒有管理員權限,所以我不希望因自己不知道的事情而煩惱是否有效。

任何幫助,將不勝感激。

謝謝,

已修復,是由於正在加載的.DLL版本不同。 加載了舊版本,一切順利。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM