2

http://msdn.microsoft.com/en-us/library/ms345167.aspxで説明されているような方法を使用して、SSIS パッケージに ODBC 宛先ソースを作成しようとしています。ODBC 接続を初期化できないようです。正しく。ODBC接続を作成するために使用しているコードは次のとおりです

    // Specify the connection manager.
    component1.RuntimeConnectionCollection.NewAt(0);
    if (component1.RuntimeConnectionCollection.Count > 0)
    {
        component1.RuntimeConnectionCollection[0].ConnectionManager =
          DtsConvert.GetExtendedInterface(myPackage.Connections["ODBC Connection"]);
        component1.RuntimeConnectionCollection[0].ConnectionManagerID =
          myPackage.Connections["ODBC Vertica Connection"].ID;
        component1.RuntimeConnectionCollection[0].Name = myPackage.Connections["ODBC Connection"].Name;
    }

このコードを使用してサーバーに接続しようとすると、COM 例外がスローされます。SSIS生成を使用して作成されたODBC接続の例はありますか

次のコードを使用して、component1 からインスタンスを作成します

CManagedComponentWrapper instance = component1.Instantiate(); 

接続を使用してオブジェクトのメタデータを初期化しようとすると、COM 例外がスローされます。例外をスローする行は読み取ります

instance.AcquireConnections(null); 

COM例外自体は

COM コンポーネントへの呼び出しからエラー HRESULT E_FAIL が返されました

これは System.Runtime.InteropServices.COMException エラー コード -2147467259 に変換されます

これがコード全体です。既存のデータ フロー コンポーネントに ODBC 宛先を追加しようとしています

    private IDTSComponentMetaData100 addODBCDest(MainPipe dataFlow_pipe, String tableName)
    {
        // ADO Net Data Source
        IDTSComponentMetaData100 component1 = dataFlow_pipe.ComponentMetaDataCollection.New();
        component1.Name = tableName + " ODBC Destination";
        Application app = new Application();

        component1.ComponentClassID = "{074B8736-CD73-40A5-822E-888215AF57DA}";
        // Get the design time instance of the component.
        CManagedComponentWrapper instance = component1.Instantiate();

        // Initialize the component
        try
        {
            instance.ProvideComponentProperties();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }

        // Specify the connection manager.
        component1.RuntimeConnectionCollection.NewAt(0);
        if (component1.RuntimeConnectionCollection.Count > 0)
        {
            component1.RuntimeConnectionCollection[0].ConnectionManager =
              DtsConvert.GetExtendedInterface(myPackage.Connections["ODBC Connection"]);
            component1.RuntimeConnectionCollection[0].ConnectionManagerID =
              myPackage.Connections["ODBC Vertica Connection"].ID;
            component1.RuntimeConnectionCollection[0].Name = myPackage.Connections["ODBC Connection"].Name;
        }

        // Set the custom properties.
        instance.SetComponentProperty("InsertMethod", 1);
        instance.SetComponentProperty("BatchSize", 10000);

        // Reinitialize the metadata.
        instance.AcquireConnections(null);  // crashes with COM exception -2147467259
        instance.ReinitializeMetaData();
        instance.ReleaseConnections();
        return component1;
    }
4

0 に答える 0