Komut dosyası Bileşen Nesne modeli anlama
Anlatıldığı gibi Kodlama ve kod bileşen hata ayıklama, üç proje öğesi Script bileşeni proje içerir:
The ScriptMain item, which contains the ScriptMain class in which you write your code.The ScriptMain class inherits from the UserComponent class.
The ComponentWrapper item, which contains the UserComponent class, an instance of ScriptComponent that contains the methods and properties that you will use to process data and to interact with the package.The ComponentWrapper item also contains Connections and Variables collection classes.
The BufferWrapper item, which contains classes that inherits from ScriptBuffer for each input and output, and typed properties for each column.
Kodunuzu yazın gibi ScriptMain öğe, kullanacağınız nesneleri, yöntemleri ve özellikleri açıklanan bu konuda.Her bileşen burada listelenen tüm yöntemleri kullanmaz; Bununla birlikte kullanıldığında, bunlar gösterilen sırayla kullanılır.
The ScriptComponent base class does not contain any implementation code for the methods discussed in this topic.Bu nedenle, gereksiz, ancak kendi uygulamanız için bir çağrı için temel sınıf uygulaması eklemek için zararsız yöntem.
Belirli bir komut dosyası bileşeni tür yöntemlerini ve bu sınıfların özelliklerini 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
kaynaks ve hedefler genellikle gerekir bağlanmak için dış veri kaynak.Geçersiz kılma AcquireConnections yöntem, ScriptComponent temel sınıf almak bağlantı veya bağlantı bilgilerini uygun bağlantı Yöneticisi.
Aşağıdaki örnek verir bir System.Data.SqlClient.SqlConnection ADO.NET bağlantı 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
Aşağıdaki örnek, bir düz dosya Bağlantı Yöneticisi'nden tam yol ve dosya adını verir ve sonra 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 temel sınıf işleme, sizin sahip olduğunuz her birini gerçekleştirmek gerekir saat yalnızca başlamadan önce veri işleme satırlarıÖrneğin, bir hedef, hedef, her veri satırı yeni verileri varolanlara eklemek için kullanacağı parametreli komut yapılandırmak isteyebilirsiniz kaynak.
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);
}
İşlem girişleri ve çıkışları
Girdileri işleniyor
Dönüşümleri veya hedefleri olarak yapılandırılan komut dosyası bileşenleri tek bir girdi vardır.
Neler BufferWrapper proje öğesi sağlar
Yapılandırdığınızdan emin, her giriş için BufferWrapper Proje öğe türetildiği bir sınıf içeren ScriptBuffer ve aynı adı taşıyan girdi.Her giriş arabelleği sınıfı aşağıdaki özellikleri, işlevleri ve yöntemleri içerir:
Adlı, yazılı erişimci giriş özellikleri her seçili sütun.Bu özelliklerin salt okunur veya okuma/yazma bağlı Kullanım türü için belirtilen sütun , Giriş sütuns sayfa Komut dosyası dönüşümü Düzenleyicisi.
A <column>_IsNull özellik için her seçili giriş sütun.Bu özellik ayrıca salt okunur veya okuma/yazma bağlı Kullanım türü için belirtilen sütun.
A DirectRowTo<outputbuffer> yöntem için yapılandırılmış her çıktı.Süzme satırları için çeşitli çıkışlar aynı zaman bu yöntemler kullanır ExclusionGroup.
A NextRow sonraki giriş satır almak için işlev ve bir EndOfRowset Son arabellek veri işlenebilir olup olmadığını belirlemek için işlev.Uygulanan yöntemler işleme giriş kullandığınızda, genellikle bu işlevler gerek yoktur UserComponent temel sınıfaBir sonraki bölüm hakkında daha fazla bilgi sağlayan UserComponent temel sınıfa
Neler ComponentWrapper proje öğesi sağlar
ComponentWrapper proje öğe adlı bir sınıf içerir UserComponent , 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.Daha sonra ProcessInput yöntem, giriş arabelleğinin sonuna denetler ve arabellek sonuna ulaşıldı, çağırır geçersiz kılınabilir FinishOutputs yöntemi ve özel MarkOutputsAsFinished yöntemi.The MarkOutputsAsFinished method then calls SetEndOfRowset on the last output buffer.
Geçersiz kılınabilir uygulaması <inputbuffer>_ProcessInput yöntem.Bu varsayılan uygulama basitçe her giriş satır ve çağrıları 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 kendi özel veri işleme kodu yazmak için kılar olduğunu.
Özel kodunuzu ne yapmalısınız
Girişte işlemek için aşağıdaki yöntemleri kullanın ScriptMain class:
Geçersiz kılma <inputbuffer>_ProcessInputRow üzerinden geçerken her giriş satır verileri işlemek için.
Geçersiz kılma <inputbuffer>_ProcessInput yalnızca giriş satırları aracılığıyla döngü sırasında ek bir şey yapın varsa,(Örneğin, sınamak sahip EndOfRowset başka olabilmesi için eylem tüm satırlar işlendikten sonra.) Call <inputbuffer>_ProcessInputRow gerçekleştirilecek satır işleme.
Geçersiz kılma FinishOutputs , kapatılmadan önce çıkışlarına bir şeyler yapmak zorunda.
The ProcessInput method ensures that these methods are called at the appropriate times.
İşlem çıkışı
Komut dosyası bileşenleri kaynakları veya dönüşümleri olarak yapılandırılmış bir veya daha fazla çıkışına sahip.
Neler BufferWrapper proje öğesi sağlar
Her çıktı, yapılandırılmış olduğunu, BufferWrapper proje için öğe türetildiği bir sınıf içeren ScriptBuffer ve aynı adı çıktı.Her giriş arabelleği sınıfı, aşağıdaki özellikleri ve yöntemleri içerir:
Adlı, yazılı, salt yazılır erişeni özelliklerini her çıktı sütun.
Bir salt <column>_IsNull için kullanabilirsiniz her seçili çıktı sütununun özellik küme sütun değeri null.
Bir AddRow yöntem için boş bir yeni satır ekleme çıkış arabelleği.
A SetEndOfRowset daha fazla arabellek veri bekleniyordu biliyorsunuz veri akışı altyapısı sağlayan yöntem.Ayrıca bir EndOfRowset işlev 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 gerek yoktur UserComponent temel sınıfa
Neler ComponentWrapper proje öğesi sağlar
ComponentWrapper proje öğe adlı bir sınıf içerir UserComponent , 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 bir kaynak bileşeni ise, (yani giriş bileşeni varsa), PrimeOutput çağrıları geçersiz kılınabilir FinishOutputs yöntem ve özel MarkOutputsAsFinished yöntem.The MarkOutputsAsFinished method 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 kendi özel veri işleme kodu yazmak için kılar olduğunu.
Özel kodunuzu ne yapmalısınız
İçinde çıkışlarına işlemek için aşağıdaki yöntemleri kullanın ScriptMain class:
Geçersiz kılma CreateNewOutputRows sadece zaman Ekle ve işleme giriş satır var. önce çıkış satır doldurmakÖrneğin, kullanmak CreateNewOutputRows bir kaynak, ancak bir ile zaman uyumsuz çıkışlarına dönüştürme çağrısı AddRow sırasında veya sonrasında işleme giriş veri.
Geçersiz kılma FinishOutputs , kapatılmadan önce çıkışlarına bir şeyler yapmak zorunda.
The PrimeOutput method ensures that these methods are called at the appropriate times.
Yöntem postExecute
Geçersiz kılma PostExecute yöntem, ScriptComponent temel sınıf işleme, sizin sahip olduğunuz her birini gerçekleştirmek gerekir saat sonra veri satırlarını işlediğinizÖrneğin, kaynak kapatmak istediğiniz System.Data.SqlClient.SqlDataReader , için kullandığınız yükleme verileri veri akışı.
Önemli |
---|
koleksiyon , ReadWriteVariables Yalnızca kullanılabilir PostExecute yöntem.Bu nedenle her satır veri işleme gibi paket değişken değerini doğrudan artırmanız olamaz.Bunun yerine, yerel bir değişkenin değerini artırmak ve küme yerel değişken değeri için paket değişkenin değeri PostExecute yöntem sonra tüm verileri işlenmiş. |
ReleaseConnections yöntemi
kaynaks ve hedefler genellikle gerekir bağlanmak için dış veri kaynak.Geçersiz kılma ReleaseConnections yöntem, ScriptComponent taban sınıfı kapatıp, daha önce açmış olduğunuz bağlantı serbest bırakmak için AcquireConnections yöntem.
Dim connMgr As IDTSConnectionManager100
...
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(sqlConn)
End Sub
IDTSConnectionManager100 connMgr;
public override void ReleaseConnections()
{
connMgr.ReleaseConnection(sqlConn);
}
|