Aracılığıyla paylaş


Zaman uyumlu çıkışlarını ile özel bir dönüştürme bileşen geliştirme

Zaman uyumlu çıkışlarını dönüştürme bileşenlerle Geliş yönündeki bileşenlerini satır almak ve okuma veya satırları akış yönündeki bileşenlere geçerken bu satırların sütunlarındaki değerleri değiştirin.Geliş yönündeki bileşenleri tarafından sağlanan sütunlarından türetilen ek çıktı sütunları da tanımlayabilir, ancak veri akışı için satır eklemeyin.Zaman uyumlu ve zaman uyumsuz bileşenleri arasındaki farklar hakkında daha fazla bilgi için bkz: Zaman uyumlu ve zaman uyumsuz dönüşümleri'ni anlama.

Bu tür bir bileşen, bileşene koşuluyla verileri değiştirilen satır içi olduğu ve burada bileşen işlemeden önce tüm satırları görmek yoksa görevler için uygundur.Bu, dönüştürme ile zaman uyumlu çıkışlarını genellikle, dış veri kaynaklarına bağlanma, çünkü geliştirmek için kolay bir bileşeni dış meta veriler sütunları yönetmek veya çıktı arabelleği için satır ekleme olur.

Bir dönüştürme bileşeni ile zaman uyumlu çıkışlarını oluşturma eklenmesi gerektirir bir IDTSInput100 Bu bileşen için seçili sütunların Geliş yönündeki yer alır ve bir IDTSOutput100 içeren nesne bileşeni tarafından oluşturulan sütun türetilir. Ayrıca, uygulama tasarım-içerir saat yöntemleri ve okuma veya çalışma sırasında gelen arabelleği satırları sütunları değiştirir sağlayan kod.

Bu bölüm, bir özel dönüştürme bileşeni'ni uygulamak için gerekli ve daha iyi yardımcı olmak amacıyla kod örnekleri kavramlarını anlamak sağlar bilgileri sağlar.Bir örnek dönüştürme bileşeni için zaman uyumlu çıkışlarını, bkz: Change Case Component Sample. Bu tür bir bileşeni tam bir örnek için bkz: Change Case Component Sample.

Tasarım zamanı

Tasarım-saat bu bileşen, giriş ve çıkışlarını oluşturma bileşeni ürettiği herhangi bir ek çıktı sütunları ekleme ve yapılandırma bileşeninin doğrulanıyor içerir kodu.

Bileşeni oluşturma

Giriş, çıkış ve bileşen'ün özel özellikleri genellikle sırasında oluşturulan ProvideComponentProperties() yöntem. Giriş ve çıkışını dönüştürme bileşeni ile zaman uyumlu çıkışlarını ekleyebileceğiniz iki yolu vardır.Temel sınıf uygulama yöntem kullanın ve sonra varsayılan giriş ve çıkış oluşturur veya açıkça giriş ekleyebilir ve kendiniz Çıkış'ı değiştirebilirsiniz.

Aşağıdaki kod örneği uygulaması gösterir. ProvideComponentProperties() Giriş ve çıkış nesneler açıkça ekler. Arama için aynı şeyi yapmak bir temel sınıf, bir açıklama bulunur.

using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime;

namespace Microsoft.Samples.SqlServer.Dts
{
    [DtsPipelineComponent(DisplayName = "SynchronousComponent", ComponentType = ComponentType.Transform)]
    public class SyncComponent : PipelineComponent
    {

        public override void ProvideComponentProperties()
        {
            // Add the input.
            IDTSInput100 input = ComponentMetaData.InputCollection.New();
            input.Name = "Input";

            // Add the output.
            IDTSOutput100 output = ComponentMetaData.OutputCollection.New();
            output.Name = "Output";
            output.SynchronousInputID = input.ID;

            // Alternatively, you can let the base class add the input and output
            // and set the SynchronousInputID of the output to the ID of the input.
            // base.ProvideComponentProperties();
        }
    }
}
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime

<DtsPipelineComponent(DisplayName:="SynchronousComponent", ComponentType:=ComponentType.Transform)> _
Public Class SyncComponent
    Inherits PipelineComponent

    Public Overrides Sub ProvideComponentProperties()

        ' Add the input.
        Dim input As IDTSInput100 = ComponentMetaData.InputCollection.New()
        input.Name = "Input"

        ' Add the output.
        Dim output As IDTSOutput100 = ComponentMetaData.OutputCollection.New()
        output.Name = "Output"
        output.SynchronousInputID = Input.ID

        ' Alternatively, you can let the base class add the input and output
        ' and set the SynchronousInputID of the output to the ID of the input.
        ' base.ProvideComponentProperties();

    End Sub

End Class

Oluşturma ve çıktı sütunları yapılandırma

Zaman uyumlu çıkışlarını dönüştürme bileşenlerle arabellekleri için satır eklemeyin, ancak bunlar çok ekleyebilir, çıktı sütunları çıktı.Bir bileşen, bir çıktı sütunu ekler, genellikle, değerleri yeni bir çıkış sütunu zamanında aşağıdakilerden bir veya daha fazla bileşen Geliş yönündeki bir bileşen tarafından sağlanan sütun içerdiği verileri türetilir.

Bir çıkış sütun oluşturduktan sonra Veri türünü özelliklerini ayarlamalısınız.Veri türü özelliklerini bir Çıktı sütununun özel işlem gerektirir ve arama yoluyla gerçekleştirilen SetDataTypeProperties(DataType, Int32, Int32, Int32, Int32) yöntem. Bu yöntem gerekir çünkü DataType(), Length(), Precision(), ve CodePage() her biri diğerinin ayarlarını bağlıdır çünkü tek tek salt okunur özelliklerdir. Bu yöntem, özellik değerleri sürekli olarak küme ve veri akışı görevi doğru şekilde ayarlandıklarından doğrulamak için kullandığı yöntemi sağlar.

The DataType() of the sütun determines the values that are küme for the other properties. Aşağıdaki tabloda gereksinimleri bağımlı özelliklerin her biri için gösterir DataType(). Listelenmeyen veri türleri, sıfır olarak ayarlamak, bağımlı özellikleri vardır.

DataType

Uzunluk

Ölçek

Duyarlık

CodePage

dt_decimal

0

0'Dan büyük ve küçük veya eşit 28 için.

0

0

dt_cy

0

0

0

0

dt_numeric

0

0'Dan büyük ve küçük daha veya 28 eşit ve Precision'dan.

Büyük veya eşittir 1'den küçük veya eşittir 38 ve.

0

dt_bytes

0'Dan büyük.

0

0

0

dt_str

0 Ile 8000'den küçük büyük.

0

0

Değil 0 ve geçerli kod sayfa.

dt_wstr

0 Ile 4000'den küçük büyük.

0

0

0

Verileri kısıtlamalar yazın, çünkü özellikleri çıktı veri türünü temel alan sütun, doğru seçmelisiniz Integration Services yönetilen türleriyle çalışırken, veri türü. Temel sınıf üç yardımcı yöntemleri sağlar. ConvertBufferDataTypeToFitManaged(DataType, Boolean%), BufferTypeToDataRecordType(DataType), ve DataRecordTypeToBufferType(Type) seçildiğinde yönetilen bir bileşen geliştiricileri, yardımcı bir SSIS veri belirli bir yönetilen bir tür'yazın. Bu yöntemler yönetilen bir veri türlerine dönüştürün. SSIS veri türleri ve bunun tersi de geçerlidir.

saat çalıştırın.

Genellikle uygulaması çalışma-saat bileşenin bir parçası iki görev olarak sınıflandırılır; bileşen giriş ve çıkış sütunlarını arabellekte, bulma ve okuma veya gelen arabellek satırları bu sütunların değerleri yazılıyor.

Arabellekte sütun bulma

Bileşenin giriş veya çıkış topluluklar içindeki sütun sayısı büyük olasılıkla yürütülürken bir bileşenle sağlanan arabelleklerindeki sütun sayısını aşıyor.Her tampon bileşenlerinde bir Veri akışında tanımlanan tüm çıktı sütunları içeren olmasıdır.Arabellek sütunları girdi veya çıktı sütunlarının doğru eşleşen emin olmak için , bileşen geliştiriciler kullanmalıdır FindColumnByLineageID(Int32, Int32) yöntem BufferManager(). Bu yöntem bir sütun lineage KIMLIğINI tarafından belirtilen arabellekte bulur.Genellikle sütun sırasında bulunan PreExecute() Bu ilk çalıştırma yöntem olduğundan burada BufferManager() özellik kullanılabilir hale gelir.

Aşağıdaki kod örneği, giriş ve çıkış sütun koleksiyonunda sırasında sütun dizinlerde bulur bir bileşeni gösterir. PreExecute(). Sütun dizinleri tamsayı dizisi depolanır ve sırasında bileşen tarafından erişilebilir ProcessInput(Int32, PipelineBuffer).

int []inputColumns;
int []outputColumns;

public override void PreExecute()
{
    IDTSInput100 input = ComponentMetaData.InputCollection[0];
    IDTSOutput100 output = ComponentMetaData.OutputCollection[0];

    inputColumns = new int[input.InputColumnCollection.Count];
    outputColumns = new int[output.OutputColumnCollection.Count];

    for(int col=0; col < input.InputColumnCollection.Count; col++)
    {
        IDTSInputColumn100 inputColumn = input.InputColumnCollection[col];
        inputColumns[col] = BufferManager.FindColumnByLineageID(input.Buffer, inputColumn.LineageID);
    }

    for(int col=0; col < output.OutputColumnCollection.Count; col++)
    {
        IDTSOutputColumn100 outputColumn = output.OutputColumnCollection[col];
        outputColumns[col] = BufferManager.FindColumnByLineageID(input.Buffer, outputColumn.LineageID);
    }

}
Public Overrides Sub PreExecute()

    Dim input As IDTSInput100 = ComponentMetaData.InputCollection(0)
    Dim output As IDTSOutput100 = ComponentMetaData.OutputCollection(0)


    ReDim inputColumns(input.InputColumnCollection.Count)
    ReDim outputColumns(output.OutputColumnCollection.Count)

    For col As Integer = 0 To input.InputColumnCollection.Count

        Dim inputColumn As IDTSInputColumn100 = input.InputColumnCollection(col)
        inputColumns(col) = BufferManager.FindColumnByLineageID(input.Buffer, inputColumn.LineageID)
    Next

    For col As Integer = 0 To output.OutputColumnCollection.Count

        Dim outputColumn As IDTSOutputColumn100 = output.OutputColumnCollection(col)
        outputColumns(col) = BufferManager.FindColumnByLineageID(input.Buffer, outputColumn.LineageID)
    Next

End Sub

Satır işleniyor

Bileşenleri alırsınız. PipelineBuffer satır ve sütunları içeren nesneleri ProcessInput(Int32, PipelineBuffer) yöntem. Bu yöntem sırasında arabellek satırları iterated ve sırasında sütunları tanımlanır. PreExecute() Okuma ve değiştirme. Daha fazla satır Geliş yönündeki bileşeninden sağlanan kadar yöntem veri akışı görevi tarafından sürekli olarak adlandırılır.

Arabellekte tek bir sütun okunamıyor ya da dizi dizin oluşturucu erişim yöntem kullanarak veya birini kullanarak yazılmış Get veya Set yöntemleri. The Get and Set methods are more efficient and should be used when the data type of the sütun in the buffer is known.

Aşağıdaki kod örneği uygulaması gösterir ProcessInput(Int32, PipelineBuffer) gelen satırları işleme yöntem.

public override void ProcessInput( int InputID, PipelineBuffer buffer)
{
       while( buffer.NextRow())
       {
            for(int x=0; x < inputColumns.Length;x++)
            {
                if(!buffer.IsNull(inputColumns[x]))
                {
                    object columnData = buffer[inputColumns[x]];
                    // TODO: Modify the column data.
                    buffer[inputColumns[x]] = columnData;
                }
            }
        
      }
}
Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal buffer As PipelineBuffer)

        While (buffer.NextRow())

            For x As Integer = 0 To inputColumns.Length

                if buffer.IsNull(inputColumns(x)) = false then

                    Dim columnData As Object = buffer(inputColumns(x))
                    ' TODO: Modify the column data.
                    buffer(inputColumns(x)) = columnData

                End If
            Next

        End While
End Sub

Örnek

Aşağıdaki örnek, tüm dize sütun değerleri büyük harfe çevirir basit dönüştürme bileşeni ile zaman uyumlu çıkışları gösterir.Bu örnek tüm yöntemleri ve bu konuda tartışılan işlevselliği gösteren değil.Bu, önemli yöntemler her saat uyumlu çıkışlarını özel dönüştürme bileşeniyle kılmalıdır ancak Tasarım zamanı doğrulama kodunu içeren gösterir.Tam bir örnek dönüştürme için bir bileşeni ile zaman uyumlu çıkışlarını, bkz: Change Case Component Sample.

using System;
using System.Collections;
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

namespace Uppercase
{
  [DtsPipelineComponent(DisplayName = "Uppercase")]
  public class Uppercase : PipelineComponent
  {
    ArrayList m_ColumnIndexList = new ArrayList();

    public override void ProvideComponentProperties()
    {
      base.ProvideComponentProperties();
      ComponentMetaData.InputCollection[0].Name = "Uppercase Input";
      ComponentMetaData.OutputCollection[0].Name = "Uppercase Output";
    }

    public override void PreExecute()
    {
      IDTSInput100 input = ComponentMetaData.InputCollection[0];
      IDTSInputColumnCollection100 inputColumns = input.InputColumnCollection;

      foreach (IDTSInputColumn100 column in inputColumns)
      {
        if (column.DataType == DataType.DT_STR || column.DataType == DataType.DT_WSTR)
        {
          m_ColumnIndexList.Add((int)BufferManager.FindColumnByLineageID(input.Buffer, column.LineageID));
        }
      }
    }

    public override void ProcessInput(int inputID, PipelineBuffer buffer)
    {
      while (buffer.NextRow())
      {
        foreach (int columnIndex in m_ColumnIndexList)
        {
          string str = buffer.GetString(columnIndex);
          buffer.SetString(columnIndex, str.ToUpper());
        }
      }
    }
  }
}
Imports System 
Imports System.Collections 
Imports Microsoft.SqlServer.Dts.Pipeline 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper 
Namespace Uppercase 

 <DtsPipelineComponent(DisplayName="Uppercase")> _ 
 Public Class Uppercase 
 Inherits PipelineComponent 
   Private m_ColumnIndexList As ArrayList = New ArrayList 

   Public  Overrides Sub ProvideComponentProperties() 
     MyBase.ProvideComponentProperties 
     ComponentMetaData.InputCollection(0).Name = "Uppercase Input" 
     ComponentMetaData.OutputCollection(0).Name = "Uppercase Output" 
   End Sub 

   Public  Overrides Sub PreExecute() 
     Dim input As IDTSInput100 = ComponentMetaData.InputCollection(0) 
     Dim inputColumns As IDTSInputColumnCollection100 = input.InputColumnCollection 
     For Each column As IDTSInputColumn100 In inputColumns 
       If column.DataType = DataType.DT_STR OrElse column.DataType = DataType.DT_WSTR Then 
         m_ColumnIndexList.Add(CType(BufferManager.FindColumnByLineageID(input.Buffer, column.LineageID), Integer)) 
       End If 
     Next 
   End Sub 

   Public  Overrides Sub ProcessInput(ByVal inputID As Integer, ByVal buffer As PipelineBuffer) 
     While buffer.NextRow 
       For Each columnIndex As Integer In m_ColumnIndexList 
         Dim str As String = buffer.GetString(columnIndex) 
         buffer.SetString(columnIndex, str.ToUpper) 
       Next 
     End While 
   End Sub 
 End Class 
End Namespace
Integration Services icon (small) Tümleştirme Hizmetleri ile güncel kalın

Karşıdan yüklemeler, makaleleri, örnekler ve en son Microsoft video yanı sıra, seçili topluluğun çözümleri için ziyaret Integration Services sayfa MSDN veya TechNet:

Bu güncelleştirmelerin otomatik bildirim için kullanılabilir RSS akışlarına abone olmak sayfa.