Veri akışı bileşenleri programsal olarak ekleme
Bir veri akışı oluştururken, bileşenleri ekleyerek başlatın.Bu bileşenleri yapılandırmak ve birlikte çalışma veri akışını sağlamak için bunları bağlamak saat.Bu bölüm, bir bileşen oluşturma tasarım-veri akışı görevi ekleme açıklar saat bileşeni ve sonra bileşen yapılandırma örnekni.Bileşenleri bağlama hakkında daha fazla bilgi için bkz: Veri akışı bileşenleri programsal olarak bağlanma.
Bir bileşeni ekleme
Call New() yöntem ComponentMetaDataCollection() Yeni bir bileşen oluşturmak ve veri akışı göreve eklemek için koleksiyon'ı tıklatın. Bu yöntem döndürür IDTSComponentMetaData100 bileşen, arabirim. Ancak, bu noktadan IDTSComponentMetaData100 herhangi bir bileşene özgü bilgileri içermiyor. küme ComponentClassID() bileşen türünü tanımlayan özellik. Çalışma sırasında bileşeninin bir örneğini oluşturmak için bu özelliğin değeri veri akışı görevi kullanan saat.
Belirtilen değer ComponentClassID() özellik CLSID, PROGID, olabilir veya CreationName() Bileşen özelliği. CLSID değeri olarak bileşenin normalde Properties penceresinde görüntülenir ComponentClassID() özellik. Bu özellik ve diğer özellikleri kullanılabilir bileşenler'i edinme hakkında daha fazla bilgi için bkz: Veri akışı bileşenleri programsal olarak keşfetme.
Yönetilen bir bileşen ekleme
Çünkü, bu değerler bir sarmalayıcı ve bileşenin kendi kendine işaret bir veri akışına yönetilen bir veri akışı bileşenleri eklemek için CLSID veya PROGID kullanamazsınız.Bunun yerine kullanabileceğiniz CreationName özellik veya AssemblyQualifiedName Aşağıdaki örnekte gösterildiği gibi özellik.
Kullanmayı düşünüyorsanız AssemblyQualifiedName özellik, ardından başvuru eklemelisiniz, Visual Studio için proje derleme yönetilen bileşen içerir. Bu derlemeleri .NET sekmesinde listelenen Başvuru Ekle iletişim kutusu.Normal olarak bulmak için gözatmanız gerekir derleme, C:\Program Files\Microsoft SQL Server\100\DTS\PipelineComponents klasör.
Yerleşik bir yönetilen veri akışı bileşenleri içerir:
ADO.NET Kaynak
xml kaynak
veri okuyucu hedef
SQL Server Sıkıştırma hedefi
Komut dosyası bileşeni
Aşağıdaki kod örneği, her iki veri akışı için yönetilen bir bileşen ekleme yolları gösterilmiştir:
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;
}
}
}
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Module Module1
Sub Main()
Dim package As Microsoft.SqlServer.Dts.Runtime.Package = _
New Microsoft.SqlServer.Dts.Runtime.Package()
Dim e As Executable = package.Executables.Add("STOCK:PipelineTask")
Dim thMainPipe As Microsoft.SqlServer.Dts.Runtime.TaskHost = _
CType(e, Microsoft.SqlServer.Dts.Runtime.TaskHost)
Dim dataFlowTask As MainPipe = CType(thMainPipe.InnerObject, MainPipe)
' The Application object will be used to obtain the CreationName
' of a PipelineComponentInfo from its PipelineComponentInfos collection.
Dim app As New Application()
' Add a first ADO NET source to the data flow.
' The CreationName property requires an Application instance.
Dim component1 As IDTSComponentMetaData100 = _
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.
Dim component2 As IDTSComponentMetaData100 = _
dataFlowTask.ComponentMetaDataCollection.New()
component2.Name = "DataReader Source"
component2.ComponentClassID = _
GetType(Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter).AssemblyQualifiedName
End Sub
End Module
Tasarım-CVE-2006-saat örnekni bileşeni oluşturma
Call Instantiate() Tasarım oluşturma yöntem saat ile tanımlanan bileşen örneği ComponentClassID() özellik. Bu yöntem döndürür CManagedComponentWrapper Yönetilen sarıcı olan bir nesne için IDTSDesigntimeComponent100 arabirim.
Mümkün olduğunda tasarım-yöntemlerini kullanarak bir bileşeni değiştirmelisiniz saat yerine bileşen meta veriler doğrudan değiştirmek yoluyla örnek.Genellikle olsa öğeleri, bağlantılar gibi doğrudan kurmalısınız meta veriler, izlemek ve değişiklikleri doğrulamak için bileşenin yeteneği atlamak için meta verileri doğrudan değiştirmek için inadvisable olur.
Bağlantıları atama
OLE DB gibi bazı bileşenlerin kaynak bileşeni, bir dış veri bağlantısı gerektirir ve varolan kullanın. ConnectionManager Nesne bu amaç için bir pakette. The Count() özellik of the RuntimeConnectionCollection() koleksiyon indicates the number of run-saat ConnectionManager objects required by the component. Sayı sıfırdan büyük değilse, bileşeni, bir bağlantı gerektiriyor.Belirterek paket bileşeni için bir Bağlantı Yöneticisi atama ConnectionManager() ve Name() ilk bağlantı özelliklerini RuntimeConnectionCollection(). Note that the name of the connection manager in the run-time connection collection must match the name of the connection managerreferenced from the package.
Özel özelliklerin değerlerini ayarlama
Sonra tasarım-oluşturma saat bileşeni, arama örneği ProvideComponentProperties() yöntem. Bu yöntem için bir kurucu benzer çünkü özel özelliklerini ve giriş ve çıkış nesnelerini oluşturarak yeni oluşturulan bir bileşen başlatır.Çağırma ProvideComponentProperties() bir bileþen bileşeni kendini sıfırlamak ve daha önce meta veriler için yapılmış olan değişiklikleri kaybetmek için birden fazla saat.
The CustomPropertyCollection() of the component contains a koleksiyon of IDTSCustomProperty100 objects specific to the component. Aradığınızda farklı olarak, nesnenin özelliklerini her zaman nesne üzerinde görülebilir olduğu, diğer bir programlama modeli bileşenleri yalnızca kendi özel özellik koleksiyonları doldurmak ProvideComponentProperties() yöntem. Yöntem çağrısı sonra SetComponentProperty(String, Object) Tasarım-yöntemi saat özel özelliklerini değerler atamak için bileşen örneği. Bu yöntem, özel özellik için tanımlar ve yeni değeri ad/değer çifti kabul eder.
Çıktı sütunları başlatılıyor
Göreve bir bileşen eklemek ve yapılandırmak sonra sütun koleksiyon başlatılamıyor IDTSOutput100 nesne. Bu adım, özellikle kaynak bileşenleri için geçerlidir, ancak bunlar genellikle Geliş yönündeki bileşenlerin aldıkları sütunlara bağımlı olduğundan dönüştürme ve hedef bileşenleri için sütunları başlatılamıyor..
Call ReinitializeMetaData() yöntem, bir Kaynak bileşeninin çıkışlarını sütunlarda başlatılamıyor. Dış veri kaynak s bileşenleri otomatik olarak bağlanma, çünkü arama AcquireConnections(Object) önce arama yöntem ReinitializeMetaData() Bileşen erişim, dış veri sağlamak için kaynak ve sütun meta veriler doldurmak için. Son olarak, arama ReleaseConnections() bağlantı yayımlamayı yöntem.
Sonraki adım
Bileşen yapılandırma sonra sonraki adıma tartışılan konu içinde bileşenler arasındaki yollar oluşturmak için olur Iki bileşenleri arasında bir yol oluşturma..
Örnek
Aşağıdaki kod örnek, OLE DB kaynağı bileşeni için veri akışı görevi ekler, bileşen tasarım zamanı bir kopyasýný oluþturur ve bileşenin özelliklerini yapılandırır.Bu örnek, bir derlemeye Microsoft.SqlServer.DTSRuntimeWrap ek başvuru gerektirir.
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.
}
}
}
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Module Module1
Sub Main()
Dim package As Microsoft.SqlServer.Dts.Runtime.Package = _
New Microsoft.SqlServer.Dts.Runtime.Package()
Dim e As Executable = package.Executables.Add("STOCK:PipelineTask")
Dim thMainPipe As Microsoft.SqlServer.Dts.Runtime.TaskHost = _
CType(e, Microsoft.SqlServer.Dts.Runtime.TaskHost)
Dim dataFlowTask As MainPipe = CType(thMainPipe.InnerObject, MainPipe)
' Add an OLEDB connection manager to the package.
Dim cm As ConnectionManager = 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.
Dim component As IDTSComponentMetaData100 = _
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.
Dim instance As CManagedComponentWrapper = component.Instantiate()
' Initialize the component.
instance.ProvideComponentProperties()
' Specify the connection manager.
If component.RuntimeConnectionCollection.Count > 0 Then
component.RuntimeConnectionCollection(0).ConnectionManager = _
DtsConvert.GetExtendedInterface(package.Connections(0))
component.RuntimeConnectionCollection(0).ConnectionManagerID = _
package.Connections(0).ID
End If
' Set the custom properties.
instance.SetComponentProperty("AccessMode", 2)
instance.SetComponentProperty("SqlCommand", _
"Select * from Production.Product")
' Reinitialize the metadata.
instance.AcquireConnections(vbNull)
instance.ReinitializeMetaData()
instance.ReleaseConnections()
' Add other components to the data flow and connect them.
End Sub
End Module
|