Komut dosyası Bileşen Nesne modeli anlama

Anlatıldığı gibi Kodlama ve kod bileşen hata ayıklama, komut dosyası bileşeni proje üç proje öğe içerir:

  1. The ScriptMain öğe, which contains the ScriptMain class in which you write your code. The ScriptMain class inherits from the UserComponent class.

  2. The ComponentWrapper öğe, which contains the UserComponent class, an örnek of ScriptComponent that contains the methods and properties that you will use to process data and to interact with the paket. The ComponentWrapper öğe also contains Connections and Variables koleksiyon classes.

  3. The BufferWrapper öğe, which contains classes that inherits from ScriptBuffer for each input and output, and typed properties for each sütun.

Kod yazma gibi ScriptMain öğe, nesneleri, yöntemleri ve bu konuda tartışılan özelliklerini kullanır. Her bileşenin listelenen yöntemleri burada kullanmaz; ancak, bu seçenek kullanıldığında, gösterilen sırayla kullanılırlar.

The ScriptComponent base class does not contain any implementation code for the methods discussed in this topic.Bu nedenle, gereksiz zararsız bir çaðrý temel sınıf uygulama yönteminin kendi uygulamasına eklemek için nesnesidir.

Bu sınıfların özellikleri ve yöntemleri, komut dosyası bileşeni belirli bir tür kullanma hakkında daha fazla bilgi için bkz: Ek komut dosyası bileşeni örnekleri. Örnek konuları, tüm kod örnekleri de içerir.

AcquireConnections yöntem

Kaynak ve hedefleri, genellikle bir dış veri kaynağına bağlanmanız gerekir.Geçersiz kılma AcquireConnections(Object) yöntem ScriptComponent sınıf, uygun bağlantı veya bağlantı bilgilerini almak için temel bağlantı yöneticisi.

Aşağıdaki örnek işlevi bir System.Data.SqlClient.SqlConnection ADO.NET bağlantı yöneticisinden.

    Dim connMgr As IDTSConnectionManager100
    Dim sqlConn As SqlConnection

    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

        connMgr = Me.Connections.MyADONETConnection
        sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)

    End Sub

Aşağıdaki örnek, bir tam yol ve dosya adı, bir düz dosya Bağlantı Yöneticisi'nden verir ve kullanarak dosyayı açar bir System.IO.StreamReader.

    Private textReader As StreamReader
    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

        Dim connMgr As IDTSConnectionManager100 = _
            Me.Connections.MyFlatFileSrcConnectionManager
        Dim exportedAddressFile As String = _
            CType(connMgr.AcquireConnection(Nothing), String)
        textReader = New StreamReader(exportedAddressFile)

    End Sub

Yöntem preExecute

Geçersiz kılma PreExecute() yöntem ScriptComponent yalnızca veri satırlarını işleme başlamadan önce saat gerçekleştirmeniz gereken işleme sahip her taban sınıf. Örneğin, bir hedef, hedef veri kaynağının her veri satırı eklemek için kullanacağı bir parametreli komut yapılandırmak isteyebilirsiniz.

    Dim sqlConn As SqlConnection
    Dim sqlCmd As SqlCommand
    Dim sqlParam As SqlParameter
...
    Public Overrides Sub PreExecute()

        sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
            "VALUES(@addressid, @city)", sqlConn)
        sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
        sqlCmd.Parameters.Add(sqlParam)
        sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
        sqlCmd.Parameters.Add(sqlParam)

    End Sub
    SqlConnection sqlConn; 
    SqlCommand sqlCmd; 
    SqlParameter sqlParam; 
    
    public override void PreExecute() 
    { 
        
        sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " + "VALUES(@addressid, @city)", sqlConn); 
        sqlParam = new SqlParameter("@addressid", SqlDbType.Int); 
        sqlCmd.Parameters.Add(sqlParam); 
        sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30); 
        sqlCmd.Parameters.Add(sqlParam); 
       
    }

Giriş ve çıkışlarını işleniyor

Giriş işleniyor

Komut dosyası bileşenleri, dönüştürmeler ve hedefleri yapılandırılmış bir giriş vardır.

BufferWrapper proje öğe sağlar

Yapılandırdığınızdan emin, her giriş için BufferWrapper Proje öğesi den türetilmiş bir sınıf içerir. ScriptBuffer ve giriş ile aynı ada sahip. Her giriş arabelleği sınıfı, aşağıdaki özellikleri, işlevleri ve yöntemleri içerir:

  • Adlandırılmış, yazılı erişimci özelliklerini her giriş sütun seçili.Bu özellikler salt okunur veya okuma/yazma bağlı Kullanım türü sütunu için belirtilenGiriş bir sütun sayfaKomut dosyası dönüştürme Düzenleyicisi.

  • C <column>_IsNull Her özellik, giriş sütun seçili. Bu özellik ayrıca, salt okunur olduğundan veya bağlı okuma/yazma Kullanım türü sütun için belirtildi.

  • C DirectRowTo<outputbuffer> yöntem her biri için çıkış yapılandırılmış. Satır için çeşitli çıkış aynı süzme işlemi, bu yöntemleri kullanır ExclusionGroup.

  • C NextRow sonraki giriş satır almak için işlevi ve bir EndOfRowset verilerin son arabellek mi işlendiğini belirlemek için işlev. Uygulanan yöntem işleme giriş kullandığınızda, genellikle bu işlevlere gerek yoktur UserComponent taban sınıf. Sonraki bölümde ilgili daha fazla bilgi sağlar. UserComponent taban sınıf.

ComponentWrapper proje öğe sağlar

ComponentWrapper proje öğe adında bir sınıf içerir. UserComponent den türeyen ScriptComponent. The ScriptMain class in which you write your custom code derives in turn from UserComponent.The UserComponent class contains the following methods:

  • Geçersiz kılınmış uygulaması ProcessInput yöntem. This is the method that the data flow engine calls next at run time after the PreExecute method, and it may be called multiple times.ProcessInput hands off processing to the <inputbuffer>_ProcessInput method.Sonra ProcessInput yöntem giriş arabelleği sonu için denetler ve arabellek sonuna ulaşıldı, geçersiz kılınabilir çağırır. FinishOutputs yöntem ve özel MarkOutputsAsFinished yöntem. The MarkOutputsAsFinished yöntem then calls SetEndOfRowset on the last output buffer.

  • Geçersiz kılınabilir uygulaması <inputbuffer>_ProcessInput yöntem. Bu varsayılan uygulama, yalnızca her giriş, satır ve çağrıları aracılığıyla döngüsü <inputbuffer>_ProcessInputRow.

  • Geçersiz kılınabilir uygulaması <inputbuffer>_ProcessInputRow yöntem. Varsayılan olarak boş uygulamasıdır.Bu, yöntem, normal olarak, özel veri işleme kod yazmak için kılar.

Özel kodunuzu

Girdisi işlemek için aşağıdaki yöntemleri kullanın ScriptMain sınıf:

  • Geçersiz kılma <inputbuffer>_ProcessInputRow üzerinden geçerken her giriş satırındaki verileri işlemek için .

  • Geçersiz kılma <inputbuffer>_ProcessInput Yalnızca giriş satırlar arasında döngü sırasında ek bir şeyler yapmak Eğer. (Örneğin, sınanacak için gerekir EndOfRowset başka bir eylem gerçekleştirmesini tüm satırları işlendi.) Arayın.<inputbuffer>_ProcessInputRow Satır işlem gerçekleştirmek için .

  • Geçersiz kılma FinishOutputs kapalı olduğundan önce çıkışlarına bir şeyler yapmak gerekiyorsa.

The ProcessInput yöntem ensures that these methods are called at the appropriate times.

Çıkış işleniyor

Komut dosyası bileşenleri kaynakları veya dönüşümler olarak yapılandırılmış bir veya daha fazla çıkış vardır.

BufferWrapper proje öğe sağlar

Yapılandırdığınız her çıktı için gelen türetilmiş bir sınıf BufferWrapper proje öğesi içerir. ScriptBuffer ve çıktı ile aynı ada sahip. Her giriş arabelleği sınıfı, aşağıdaki özellikleri ve yöntemleri içerir:

  • Her çıktı sütun için adlandırılmış yazılı, salt yazılır erişimci özellikleri.

  • Bir salt yazılır <column>_IsNull kullandığınız her seçili çıktı sütununun özellik küme sütun değeri null.

  • Bir AddRow çıkış arabelleği için boş bir yeni satır eklemek için yöntem.

  • C SetEndOfRowset daha fazla arabellek veri beklenen biliyor veri akışı altyapısı için yöntem. De bir EndOfRowset Geçerli arabellek son arabellek veri olup olmadığını belirlemek için işlev. Uygulanan yöntem işleme giriş kullandığınızda, genellikle bu işlevlere gerek yoktur UserComponent taban sınıf.

ComponentWrapper proje öğe sağlar

ComponentWrapper proje öğe adında bir sınıf içerir. UserComponent den türeyen ScriptComponent. The ScriptMain class in which you write your custom code derives in turn from UserComponent.The UserComponent class contains the following methods:

  • Geçersiz kılınmış uygulaması PrimeOutput yöntem. The data flow engine calls this method before ProcessInput at run time, and it is only called one time.PrimeOutput hands off processing to the CreateNewOutputRows method.Daha sonra bileşen bir kaynaktan olması durumunda (diğer bir deyişle, bileşenin hiçbir girdi varsa), PrimeOutput geçersiz kılınabilir çağırır. FinishOutputs yöntem ve özel MarkOutputsAsFinished yöntem. The MarkOutputsAsFinished yöntem calls SetEndOfRowset on the last output buffer.

  • Geçersiz kılınabilir uygulaması CreateNewOutputRows yöntem. Varsayılan olarak boş uygulamasıdır.Bu, yöntem, normal olarak, özel veri işleme kod yazmak için kılar.

Özel kodunuzu

Çıkış, işlemek için aşağıdaki yöntemleri kullanın ScriptMain sınıf:

  • Geçersiz kılma CreateNewOutputRows yalnızca zaman ekleyebilir ve giriş satırları işleniyor önce çıktı satırları doldurun. Örneğin, kullanma CreateNewOutputRows bir kaynak ancak dönüştürme ile zaman uyumsuz çıkışlarını çağırması gerekir AddRow sırasında veya sonrasında, giriş verilerini işleme.

  • Geçersiz kılma FinishOutputs kapalı olduğundan önce çıkışlarına bir şeyler yapmak gerekiyorsa.

The PrimeOutput yöntem ensures that these methods are called at the appropriate times.

Yöntem postExecute

Geçersiz kılma PostExecute() yöntem ScriptComponent sonra veri satırlarından işlenen yalnızca saat gerçekleştirmeniz gereken işleme sahip her taban sınıf. Örneğin, bir kaynak, kapatmak istediğiniz System.Data.SqlClient.SqlDataReader verileri veri akışına yüklemek için kullandığınız.

Important noteImportant Note:

Topluluğu ReadWriteVariables Yalnızca kullanılabilir PostExecute yöntem. Bu nedenle her satır veri işleme gibi bir paket değişkenin değerini doğrudan artýrmak edemiyor.Bunun yerine yerel bir değişkenin değerini artırmak ve küme yerel değişkende değerine Paket değişkenin değerini PostExecute yöntemin ardından, tüm veri işlenmiştir.

ReleaseConnections yöntem

Kaynak ve hedefleri, genellikle bir dış veri kaynağına bağlanmanız gerekir.Geçersiz kılma ReleaseConnections() yöntemi ScriptComponent sınıf, kapatıp, daha önce açmış olduğunuz bağlantı serbest bırakmak için temel AcquireConnections(Object) yöntem.

    Dim connMgr As IDTSConnectionManager100
...
    Public Overrides Sub ReleaseConnections()

        connMgr.ReleaseConnection(sqlConn)

    End Sub
    IDTSConnectionManager100 connMgr;

    public override void ReleaseConnections()
    {

        connMgr.ReleaseConnection(sqlConn);

    }
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.