Komut dosyası bileşen nesne modeli anlama

As discussed in Kodlama ve kod bileşen hata ayıklama, üç proje öğesi Script bileşeni projedeki içerir:

  1. ScriptMainİçeren madde, ScriptMainkodunuzu yazdığınız sınıf. ScriptMainSınıf devralır UserComponentsınıf

  2. ComponentWrapperİçeren madde, UserComponentsınıfı, bir örneği ScriptComponentyöntem ve verileri işlemek ve paketi ile etkileşim için kullanacağınız özelliklerini içeren. ComponentWrapperÖğeyi de içeren Connectionsve VariablesKoleksiyon sınıflarını.

  3. BufferWrapper, Devraldığı sınıfları içeren madde, ScriptBufferher giriş ve çıkış ve yazılı özellikleri her sütun için.

Kodunuzu yazarken ScriptMainMadde, kullanacağınız nesneleri, yöntemleri ve özellikleri bu konuda tartışılan. Her bileşen burada listelenen tüm yöntemler kullanmaz; Bununla birlikte kullanıldığında, bunlar gösterilen sırayla kullanılır.

ScriptComponentTemel sınıf herhangi bir uygulama kodu için bu konuda anlatılan yöntem içermiyor. Bu nedenle gereksiz, ama zararsız, kendi uygulama yönteminin temel sınıf uygulaması bir çağrı ekleyin.

Yöntemleri ve özellikleri bu sınıfları Script bileşeni belirli bir türde kullanma hakkında daha fazla bilgi için bkz: bölüm Ek Script bileşeni örnekleri. Örnek konular da tam kod örnekleri içerir.

AcquireConnections yöntemi

Kaynakları ve hedefleri, genellikle bir dış veri kaynağına bağlanmanız gerekir. Geçersiz AcquireConnectionsyöntemi ScriptComponenttemel sınıf bağlantı veya bağlantı bilgilerini uygun bağlantı Yöneticisi'nden alınacak.

Aşağıdaki örnek bir System.Data.SqlClient.SqlConnectiongelen bir ado.Ağ Bağlantısı Yöneticisi.

    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
    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
    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 PreExecuteyöntemi ScriptComponentBu işlem olduğunda temel sınıf yalnızca veri satırları işleme başlamadan önce bir kez gerçekleştirmek gerekir. Örneğin, bir hedef, hedef veri kaynağına her veri satırı eklemek için kullanacağı 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
    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); 
       
    }
    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); 
       
    }

İşlem girişleri ve çıkışları

İşlem girişleri

Dönüşümleri veya hedefleri yapılandırılan komut dosyası bileşenleri bir giriş var.

Neler BufferWrapper proje öğesi sağlar

Olduğu yapılandırdınız, her giriş için BufferWrapper, dan türeyen sınıf proje öğesi içeren ScriptBuffergiriş aynı ada sahiptir. Her giriş arabelleği sınıfı, aşağıdaki özellikleri, işlevleri ve yöntemleri içerir:

  • Adlı, yazılan erişeni özelliklerini her seçili giriş sütunun. Bu özelliklerin salt okunur veya okuma/yazma bağlı Kullanım türü sütunu için belirtilen Giriş sütunlar sayfası Komut dosyası dönüşümü Düzenleyicisi.

  • A <column>_IsNullgiriş özelliği her seçili sütun. Bu özellik ayrıca salt okunur veya okuma/yazma bağlı Kullanım türü sütunu için belirtilen.

  • A DirectRowTo<outputbuffer>yöntemi her yapılandırılmış çıktı. Bu yöntemlerin çeşitli çıkış aynı satırlara filtre uygularken kullanır ExclusionGroup.

  • A NextRowişlevi bir sonraki giriş satır almak ve bir EndOfRowsetson arabellek veri işlenebilir olup olmadığını belirlemek için işlevi. Uygulanan yöntemler işleme giriş kullanırken genellikle bu işlevler gerekmez UserComponenttemel sınıf Sonraki bölüm hakkında daha fazla bilgi sağlayan UserComponenttemel sınıf

Neler ComponentWrapper proje öğesi sağlar

ComponentWrapper proje öğesi adlı bir sınıf içerir UserComponent, dan türeyen ScriptComponent. ScriptMainBuna karşılık gelen özel kod yazma sınıfı türer UserComponent. UserComponentSınıfı, aşağıdaki yöntemleri içerir:

  • Kılın uygulaması ProcessInputyöntemi. Bu, sonra çalışma zamanında veri altyapısı çağrıları akışı sonraki yöntemdir PreExecuteyöntemi ve denilen birden çok kez. ProcessInputişleme kapalı eller <inputbuffer>_ProcessInputyöntemi. Sonra ProcessInputyöntemi için giriş arabelleğinin sonuna denetler ve arabellek sonuna ulaşıldı, geçersiz çağrı FinishOutputsyöntemi ve özel MarkOutputsAsFinishedyöntemi. MarkOutputsAsFinishedSonra yöntemini çağıran SetEndOfRowsetüzerinde son çıkış arabelleği.

  • Geçersiz kılınabilir uygulaması <inputbuffer>_ProcessInputyöntemi. Bu varsayılan uygulama sadece her giriş satır ve çağrıları aracılığıyla döngüler <inputbuffer>_ProcessInputRow.

  • Geçersiz kılınabilir uygulaması <inputbuffer>_ProcessInputRowyöntemi. Varsayılan, boş bir uygulamasıdır. Bu, normalde özel veri işleme kodu yazmak için geçersiz kılar yöntemidir.

Özel kodunuzu ne yapmalıyım

Giriş işlemek için aşağıdaki yöntemleri kullanabilirsiniz ScriptMainsınıf:

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

  • Geçersiz <inputbuffer>_ProcessInputek giriş satırları döngü sırasında birşeyler varsa. (Örneğin, sen-si olmak-e sınamak EndOfRowsetsatırları başka bir eylem olsa almaya işlendi.) Arama <inputbuffer>_ProcessInputRowsatır işleme gerçekleştirmek için.

  • Geçersiz FinishOutputsonlar are yumuk önce çıkışlarına bir şeyler yapmak zorunda.

ProcessInputYöntemi sağlar Bu yöntemlerden uygun zamanlarda denir.

İşlem çıkışı

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

Neler BufferWrapper proje öğesi sağlar

Her çıktı, yapılandırdığınız için dan türeyen sınıf BufferWrapper proje öğesi içeren ScriptBufferve aynı adı taşıyan çıkış. Her giriş arabelleği sınıfı, aşağıdaki özellikleri ve yöntemleri içerir:

  • Adlandırılmış, Daktilo, salt yazılır erişeni özelliklerini her çıktı sütununa.

  • Salt yazılır <column>_IsNullözelliği her seçili çıktı sütununun sütun değeri ayarlamak için kullanabileceğiniz null.

  • Bir AddRowçıkış arabelleği boş bir yeni satır ekleme yöntemi.

  • A SetEndOfRowsetyöntem-e doğru bilmek daha fazla arabellek veri bekleniyor veri akışı altyapısı olsun. Ayrıca bir EndOfRowsetişlevi geçerli arabellek veri son arabellek olup olmadığını belirlemek için. Uygulanan yöntemler işleme giriş kullandığınızda, genellikle bu işlevler gerekmez UserComponenttemel sınıf

Neler ComponentWrapper proje öğesi sağlar

ComponentWrapper proje öğesi adlı bir sınıf içerir UserComponent, dan türeyen ScriptComponent. ScriptMainBuna karşılık gelen özel kod yazma sınıfı türer UserComponent. UserComponentSınıfı, aşağıdaki yöntemleri içerir:

  • Kılın uygulaması PrimeOutputyöntemi. Veri akışı altyapısı önce bu yöntem çağrıları ProcessInputzamanında, yalnızca bir kez denir. PrimeOutputişleme kapalı eller CreateNewOutputRowsyöntemi. Sonra bileşenin kaynak ise (yani, bileşen, hiçbir girdileri vardır), PrimeOutputçağrıları geçersiz FinishOutputsyöntemi ve özel MarkOutputsAsFinishedyöntemi. MarkOutputsAsFinishedYöntem çağrıları SetEndOfRowsetüzerinde son çıkış arabelleği.

  • Geçersiz kılınabilir uygulaması CreateNewOutputRowsyöntemi. Varsayılan, boş bir uygulamasıdır. Bu, normalde özel veri işleme kodu yazmak için geçersiz kılar yöntemidir.

Özel kodunuzu ne yapmalıyım

Çıkış işlemek için aşağıdaki yöntemleri kullanabilirsiniz ScriptMainsınıf:

  • Geçersiz CreateNewOutputRowssadece zaman doldurmak eklemek ve satır giriş satır işleme önce çıktı. Örneğin, sen-ebilmek kullanma CreateNewOutputRowsbir kaynak, ama ile zaman uyumsuz çıkışlarına dönüşümü aramak gerekir AddRowsırasında veya sonrasında giriş veri işleme.

  • Geçersiz FinishOutputsonlar are yumuk önce çıkışlarına bir şeyler yapmak zorunda.

PrimeOutputYöntemi sağlar Bu yöntemlerden uygun zamanlarda denir.

Yöntem postExecute

Geçersiz PostExecuteyöntemi ScriptComponentsize işlem olduğunda temel sınıf gerekir yapmak bir süre sonra yalnızca veri satırları işlenmiş. Örneğin, bir kaynağı kapatmak istediğiniz System.Data.SqlClient.SqlDataReaderveri akışı veri yüklemek için kullanmış.

Önemli notÖnemli

Koleksiyonu ReadWriteVariablesyalnızca kullanılabilir PostExecuteyöntemi. Bu nedenle her veri satırı işlemek gibi bir paketi değişken değerini doğrudan yanı sıra olamaz. Bunun yerine, yerel bir değişken değerini artırmak ve paketi değişken değeri yerel değişken değeri ayarlamak PostExecuteyöntemi sonra tüm veri işleme.

ReleaseConnections yöntemi

Kaynakları ve hedefleri, genellikle bir dış veri kaynağına bağlanmanız gerekir. Geçersiz ReleaseConnectionsyöntemi ScriptComponenttemel sınıf kapatmak ve daha önce açtığınız bağlantı serbest AcquireConnectionsyöntemi.

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

        connMgr.ReleaseConnection(sqlConn)

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

        connMgr.ReleaseConnection(sqlConn)

    End Sub
    IDTSConnectionManager100 connMgr;

    public override void ReleaseConnections()
    {

        connMgr.ReleaseConnection(sqlConn);

    }
    IDTSConnectionManager100 connMgr;

    public override void ReleaseConnections()
    {

        connMgr.ReleaseConnection(sqlConn);

    }
Integration Services simgesi (küçük) Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve Microsoft video yanı sıra topluluk seçili çözümleri için ziyaret Integration ServicesMSDN sayfası:


Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.

Ayrıca bkz.

Kavramlar

Script bileşeni Script bileşen düzenleyiciyi içinde yapılandırma

Kodlama ve kod bileşen hata ayıklama