Menambahkan Komponen Aliran Data Secara Terprogram
Berlaku untuk: SQL Server SSIS Integration Runtime di Azure Data Factory
Saat membuat aliran data, Anda mulai dengan menambahkan komponen. Kemudian Anda mengonfigurasi komponen tersebut dan menghubungkannya bersama-sama untuk membangun aliran data pada waktu proses. Bagian ini menjelaskan penambahan komponen ke tugas aliran data, membuat instans waktu desain komponen, lalu mengonfigurasi komponen. Untuk informasi tentang cara menyambungkan komponen, lihat Menyambungkan Komponen Aliran Data Secara Terprogram.
Menambahkan Komponen
New Panggil metode pengumpulan ComponentMetaDataCollection untuk membuat komponen baru dan menambahkannya ke tugas aliran data. Metode ini mengembalikan IDTSComponentMetaData100 antarmuka komponen. Namun, pada titik ini, IDTSComponentMetaData100 tidak berisi informasi khusus untuk satu komponen. Atur ComponentClassID properti untuk mengidentifikasi jenis komponen. Tugas aliran data menggunakan nilai properti ini untuk membuat instans komponen pada waktu proses.
Nilai yang ditentukan dalam ComponentClassID properti dapat berupa CLSID, PROGID, atau CreationName properti komponen. CLSID biasanya ditampilkan di jendela Properti sebagai nilai properti komponen ComponentClassID . Untuk informasi tentang mendapatkan properti ini dan properti lain dari komponen yang tersedia, lihat Menemukan Komponen Aliran Data secara Terprogram.
Menambahkan Komponen Terkelola
Anda tidak dapat menggunakan CLSID atau PROGID untuk menambahkan satu komponen aliran data terkelola ke aliran data, karena nilai-nilai ini menunjuk ke pembungkus dan bukan ke komponen itu sendiri. Sebagai gantinya , Anda dapat menggunakan properti CreationName atau properti AssemblyQualifiedName seperti yang ditunjukkan dalam sampel berikut.
Jika Anda berniat menggunakan properti AssemblyQualifiedName , maka Anda harus menambahkan referensi di proyek Visual Studio Anda ke rakitan yang berisi komponen terkelola. Rakitan ini tidak tercantum di tab .NET dari kotak dialog Tambahkan Referensi . Biasanya Anda harus menelusuri untuk menemukan rakitan di folder C:\Program Files\Microsoft SQL Server\100\DTS\PipelineComponents .
Komponen aliran data terkelola bawaan meliputi:
Sumber ADO.NET
Sumber XML
Tujuan DataReader
Tujuan Ringkas SQL Server
Komponen Skrip
Sampel kode berikut menunjukkan kedua cara menambahkan komponen terkelola ke aliran data:
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
Membuat Instans Design-time Komponen
Instantiate Panggil metode untuk membuat instans waktu desain komponen yang diidentifikasi oleh ComponentClassID properti . Metode ini mengembalikan objek, yang merupakan pembungkus CManagedComponentWrapper terkelola untuk IDTSDesigntimeComponent100 antarmuka.
Jika memungkinkan, Anda harus memodifikasi komponen dengan menggunakan metode instans waktu desain alih-alih dengan memodifikasi metadata komponen secara langsung. Meskipun ada item dalam metadata yang harus Anda atur secara langsung, seperti koneksi, umumnya tidak dapat dihindari untuk memodifikasi metadata secara langsung karena Anda melewati kemampuan komponen untuk memantau dan memvalidasi perubahan.
Menetapkan Koneksi
Beberapa komponen, seperti komponen Sumber OLE DB, memerlukan koneksi ke data eksternal dan menggunakan objek yang ada ConnectionManager dalam paket untuk tujuan ini. Properti Count RuntimeConnectionCollection koleksi menunjukkan jumlah objek run-time ConnectionManager yang diperlukan oleh komponen. Jika jumlahnya lebih besar dari nol, komponen memerlukan koneksi. Tetapkan manajer koneksi dari paket ke komponen dengan menentukan ConnectionManager properti dan Name koneksi pertama di RuntimeConnectionCollection. Perhatikan bahwa nama manajer koneksi dalam kumpulan koneksi run-time harus cocok dengan nama manajer koneksi yang direferensikan dari paket.
Mengatur Nilai Properti Kustom
Setelah membuat instans waktu desain komponen, panggil ProvideComponentProperties metode . Metode ini mirip dengan konstruktor karena menginisialisasi komponen yang baru dibuat dengan membuat properti kustomnya dan objek input dan outputnya. Jangan memanggil ProvideComponentProperties lebih dari satu kali pada komponen, karena komponen dapat mengatur ulang dirinya sendiri dan kehilangan modifikasi apa pun yang sebelumnya dilakukan pada metadatanya.
Komponen CustomPropertyCollection berisi kumpulan IDTSCustomProperty100 objek khusus untuk komponen. Tidak seperti model pemrograman lainnya, di mana properti objek selalu terlihat pada objek, komponen hanya mengisi koleksi properti kustom mereka saat Anda memanggil ProvideComponentProperties metode . Setelah Anda memanggil metode, gunakan SetComponentProperty metode instans waktu desain komponen untuk menetapkan nilai ke properti kustomnya. Metode ini menerima pasangan nama/nilai yang mengidentifikasi properti kustom dan memberikan nilai barunya.
Menginisialisasi Kolom Output
Setelah Anda menambahkan komponen ke tugas dan mengonfigurasinya, inisialisasi kumpulan kolom di IDTSOutput100 objek. Langkah ini sangat relevan untuk komponen sumber, tetapi mungkin tidak menginisialisasi kolom untuk komponen transformasi dan tujuan karena umumnya bergantung pada kolom yang mereka terima dari komponen hulu.
ReinitializeMetaData Panggil metode untuk menginisialisasi kolom dalam output komponen sumber. Karena komponen tidak secara otomatis tersambung ke sumber data eksternal, panggil AcquireConnections metode sebelum memanggil ReinitializeMetaData untuk menyediakan akses komponen ke sumber data eksternalnya dan kemampuan untuk mengisi metadata kolomnya. Terakhir, panggil ReleaseConnections metode untuk merilis koneksi.
Langkah Selanjutnya
Setelah menambahkan dan mengonfigurasi komponen, langkah selanjutnya adalah membuat jalur antar komponen, yang dibahas dalam topik, Membuat Jalur Antara Dua Komponen.
Sampel
Sampel kode berikut menambahkan komponen Sumber OLE DB ke tugas aliran data, membuat instans waktu desain komponen, dan mengonfigurasi properti komponen. Contoh ini memerlukan referensi tambahan ke rakitan Microsoft.SqlServer.DTSRuntimeWrap.
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
Sumber Daya Eksternal
Entri blog, EzAPI - Diperbarui untuk SQL Server 2012, pada blogs.msdn.com.