Programmgesteuertes Hinzufügen von Datenflusskomponenten

 

Gilt für: SQL Server 2016 Preview

Wenn Sie einen Datenfluss erstellen, beginnen Sie, indem Sie Komponenten hinzufügen. Anschließend werden diese Komponenten konfiguriert und miteinander verbunden, um den Datenfluss zur Laufzeit einzurichten. In diesem Abschnitt wird das Hinzufügen einer Komponente zum Datenflusstask, das Erstellen der Entwurfszeitinstanz der Komponente und das anschließende Konfigurieren der Komponente beschrieben. Informationen zum Verbinden von Komponenten finden Sie unter verbinden Data Flow Komponenten programmgesteuert.

Rufen Sie die neu Methode der ComponentMetaDataCollection Sammlung zu erstellen, eine neue Komponente dem Datenflusstask hinzuzufügen. Diese Methode gibt die "idtscomponentmetadata100" Schnittstelle der Komponente. An diesem Punkt ist jedoch die "idtscomponentmetadata100" enthält keine Informationen für eine Komponente spezifisch. Legen Sie die ComponentClassID Eigenschaft, um den Typ der Komponente zu identifizieren. Der Datenflusstask verwendet den Wert dieser Eigenschaft zum Erstellen einer Instanz der Komponente zur Laufzeit.

Der Wert im angegebenen der ComponentClassID Eigenschaft kann die CLSID, PROGID oder CreationName Eigenschaft der Komponente. Die CLSID wird normalerweise im Eigenschaftenfenster angezeigt, als Wert für der Komponente ComponentClassID Eigenschaft. Informationen zum Abrufen dieser Eigenschaft und anderer Eigenschaften verfügbarer Komponenten finden Sie unter Ermittlung von Data Flow Komponenten programmgesteuert.

Sie können die CLSID oder PROGID nicht verwenden, um dem Datenfluss eine der verwalteten Datenflusskomponenten hinzuzufügen, da diese Werte auf einen Wrapper und nicht auf die Komponente selbst zeigen. Stattdessen können Sie die CreationName Eigenschaft oder die AssemblyQualifiedName Eigenschaft wie im folgenden Beispiel gezeigt.

Wenn Sie beabsichtigen, verwenden Sie die AssemblyQualifiedName -Eigenschaft, und Sie müssen einen Verweis im Hinzufügen der Visual Studio Projekt auf die Assembly, die die verwaltete Komponente enthält. Diese Assemblys sind nicht aufgeführt, auf die Registerkarte ".NET" die Verweis hinzufügen (Dialogfeld). Normalerweise müssen Sie zum Suchen der Assembly im Durchsuchen der C:\Program Files\Microsoft SQL Server\100\DTS\PipelineComponents Ordner.

Die integrierten verwalteten Datenflusskomponenten umfassen:

  • ADO.NET-Quelle

  • XML-Quelle

  • DataReader-Ziel

  • SQL ServerCompact-Ziel

  • Skriptkomponente

Im folgenden Codebeispiel werden beide Methoden zum Hinzufügen einer verwalteten Komponente zu einem Datenfluss veranschaulicht:

using System;  
using Microsoft.SqlServer.Dts.Runtime;  
using Microsoft.SqlServer.Dts.Pipeline;  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  
  
namespace Microsoft.SqlServer.Dts.Samples  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  
      Microsoft.SqlServer.Dts.Runtime.Package package = new Microsoft.SqlServer.Dts.Runtime.Package();  
      Executable e = package.Executables.Add("STOCK:PipelineTask");  
      Microsoft.SqlServer.Dts.Runtime.TaskHost thMainPipe = (Microsoft.SqlServer.Dts.Runtime.TaskHost)e;  
      MainPipe dataFlowTask = (MainPipe)thMainPipe.InnerObject;  
  
      // The Application object will be used to obtain the CreationName  
      //  of a PipelineComponentInfo from its PipelineComponentInfos collection.  
      Application app = new Application();  
  
      // Add a first ADO NET source to the data flow.  
      //  The CreationName property requires an Application instance.  
      IDTSComponentMetaData100 component1 = dataFlowTask.ComponentMetaDataCollection.New();  
      component1.Name = "DataReader Source";  
      component1.ComponentClassID = app.PipelineComponentInfos["DataReader Source"].CreationName;  
  
      // Add a second ADO NET source to the data flow.  
      //  The AssemblyQualifiedName property requires a reference to the assembly.  
      IDTSComponentMetaData100 component2 = dataFlowTask.ComponentMetaDataCollection.New();  
      component2.Name = "DataReader Source";  
      component2.ComponentClassID = typeof(Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter).AssemblyQualifiedName;  
    }  
  }  
}  
  

Rufen Sie die Instantiate Methode zum Erstellen der Erstellung der Entwurfszeitinstanz der Komponente identifiziert durch die ComponentClassID Eigenschaft. Diese Methode gibt die CManagedComponentWrapper -Objekt, das der verwaltete Wrapper für die IDTSDesigntimeComponent100 Schnittstelle.

Eine Komponente sollte, wann immer möglich, mithilfe der Methoden der Entwurfszeitinstanz geändert werden und nicht durch direktes Ändern der Metadaten der Komponente. Es gibt zwar Elemente in den Metadaten, die Sie direkt festlegen müssen, z. B. Verbindungen, es empfiehlt sich jedoch im Allgemeinen nicht, die Metadaten direkt zu ändern, da in diesem Fall die Komponente keine Änderungen mehr überwachen und überprüfen kann.

Einige Komponenten, z. B. der OLE DB-Quellkomponente, erfordern eine Verbindung mit externen Daten und verwenden Sie ein vorhandenes ConnectionManager Objekt im Paket zu diesem Zweck. Die Anzahl Eigenschaft von der RuntimeConnectionCollection Auflistung gibt die Anzahl der zur Laufzeit ConnectionManager Objekte, von der Komponente erforderlich sind. Wenn die Anzahl größer als&0; (null) ist, erfordert die Komponente eine Verbindung. Weisen Sie einen Verbindungs-Manager aus dem Paket an die Komponente durch Angabe der ConnectionManager und Namen Eigenschaften der ersten Verbindung in der RuntimeConnectionCollection. Beachten Sie, dass der Name des Verbindungs-Managers in der Auflistung der laufzeitverbindung der Name der aus dem Paket den Verbindungs-Managerreferenced entsprechen muss.

Rufen Sie nach dem Erstellen der Entwurfszeitinstanz der Komponente, die ProvideComponentProperties Methode. Diese Methode ähnelt einem Konstruktor, da sie eine neu erstellte Komponente initialisiert, indem benutzerdefinierte Eigenschaften und Eingabe- und Ausgabeobjekte erstellt werden. Rufen Sie nicht ProvideComponentProperties mehrmals für eine Komponente, da die Komponente möglicherweise selbst zurücksetzt und alle zuvor an ihren Metadaten vorgenommenen Änderungen verloren.

Die CustomPropertyCollection der Komponente enthält eine Auflistung von IDTSCustomProperty100 Objekte, die für die Komponente spezifisch. Im Gegensatz zu anderen Programmierungsmodellen, wobei die Eigenschaften eines Objekts immer sichtbar für das Objekt sind, Auflistungen benutzerdefinierter Eigenschaften Komponenten nur aufgefüllt, wenn Sie beim Aufrufen der ProvideComponentProperties Methode. Nachdem Sie die Methode aufrufen, verwenden die SetComponentProperty -Methode der Entwurfszeitinstanz der Komponente, um die benutzerdefinierten Eigenschaften Werte zuzuweisen. Diese Methode akzeptiert ein Name/Wert-Paar, das die benutzerdefinierte Eigenschaft identifiziert und seinen neuen Wert bereitstellt.

Nachdem Sie die Aufgabe eine Komponente hinzugefügt und konfiguriert, initialisieren Sie die Auflistung der Spalten in der IDTSOutput100 des Objekts. Dieser Schritt ist insbesondere bei Quellkomponenten relevant. Möglicherweise werden dadurch jedoch keine Spalten für die Transformation und Zielkomponenten initialisiert, da diese im Allgemeinen von den Spalten abhängig sind, die sie von Upstreamkomponenten empfangen.

Rufen Sie die ReinitializeMetaData Methode, um die Spalten in den Ausgaben einer Quellkomponente zu initialisieren. Da Komponenten nicht automatisch mit externen Datenquellen hergestellt werden, rufen Sie die ' acquireconnections ' Methode vor dem Aufruf ReinitializeMetaData für die Komponente den Zugriff auf ihrer externen Datenquelle und die Möglichkeit, ihre eigene Metadatenspalte zu füllen. Rufen Sie zum Schluss die ' releaseconnections ' Methode, um die Verbindung freizugeben.

Nach dem Hinzufügen und Konfigurieren der Komponente, ist der nächste Schritt zum Erstellen der Pfade zwischen Komponenten, die in diesem Thema erläutert wird, erstellen einen Pfad zwischen zwei Komponenten.

Im folgenden Codebeispiel werden die OLE DB-Quellkomponenten einem Datenflusstask hinzugefügt, eine Entwurfszeitinstanz der Komponente erstellt und die Eigenschaften der Komponente konfiguriert. Für dieses Beispiel ist ein zusätzlicher Verweis auf die Microsoft.SqlServer.SQLTask-Assembly erforderlich.

using System;  
using Microsoft.SqlServer.Dts.Runtime;  
using Microsoft.SqlServer.Dts.Runtime.Wrapper;  
using Microsoft.SqlServer.Dts.Pipeline;  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  
  
namespace Microsoft.SqlServer.Dts.Samples  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  
      Runtime.Package package = new Runtime.Package();  
      Executable e = package.Executables.Add("STOCK:PipelineTask");  
      Runtime.TaskHost thMainPipe = e as Runtime.TaskHost;  
      MainPipe dataFlowTask = thMainPipe.InnerObject as MainPipe;  
  
      // Add an OLEDB connection manager to the package.  
      ConnectionManager cm = package.Connections.Add("OLEDB");  
      cm.Name = "OLEDB ConnectionManager";  
      cm.ConnectionString = "Data Source=(local);" +   
        "Initial Catalog=AdventureWorks;Provider=SQLOLEDB.1;" +   
        "Integrated Security=SSPI;"  
  
      // Add an OLE DB source to the data flow.  
      IDTSComponentMetaData100 component =   
        dataFlowTask.ComponentMetaDataCollection.New();  
      component.Name = "OLEDBSource";  
      component.ComponentClassID = "DTSAdapter.OleDbSource.1";  
      // You can also use the CLSID of the component instead of the PROGID.  
      //component.ComponentClassID = "{2C0A8BE5-1EDC-4353-A0EF-B778599C65A0}";  
  
      // Get the design time instance of the component.  
      CManagedComponentWrapper instance = component.Instantiate();  
  
      // Initialize the component  
      instance.ProvideComponentProperties();  
  
      // Specify the connection manager.  
      if (component.RuntimeConnectionCollection.Count > 0)  
      {  
        component.RuntimeConnectionCollection[0].ConnectionManager =   
          DtsConvert.GetExtendedInterface(package.Connections[0]);  
        component.RuntimeConnectionCollection[0].ConnectionManagerID =   
          package.Connections[0].ID;      }  
  
      // Set the custom properties.  
      instance.SetComponentProperty("AccessMode", 2);  
      instance.SetComponentProperty("SqlCommand",   
        "Select * from Production.Product");  
  
      // Reinitialize the metadata.  
      instance.AcquireConnections(null);  
      instance.ReinitializeMetaData();  
      instance.ReleaseConnections();  
  
      // Add other components to the data flow and connect them.  
    }  
  }  
}  

Blogeintrag, EzAPI – Updated for SQL Server 2012, auf blogs.msdn.com.

Integration Services icon (small)  Informieren Sie sich laufend über Integrationsservices
Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf MSDN auf der Integration Services -Seite:



 Besuchen Sie die Integration Services-Seite auf MSDN

Abonnieren Sie die auf der Seite verfügbaren RSS-Feeds, um automatische Benachrichtigungen zu diesen Updates zu erhalten.

Programmgesteuertes Verbinden von Datenflusskomponenten

Community-Beiträge

Anzeigen: