在 DTS開發(fā)記錄(2)-- 數(shù)據(jù)管道及插件 一文中,我們介紹了數(shù)據(jù)管道,IDataPipeFactory的CreateDataPipe方法需要一個IConnection參數(shù),這個參數(shù)就表示一個連接。
IConnection的定義如下:
/// IConnection用于表示到數(shù)據(jù)源或數(shù)據(jù)目標(biāo)的連接
/// </summary>
public interface IConnection
{
ConnectionTypeConnectionType{ get ;}
string ConnectionText{ get ;}
string PKeyName{ get ; set ;}
}
public enum ConnectionType
{
DataBase,File
}
無論該連接是指向數(shù)據(jù)庫的一個表還是某個結(jié)構(gòu)化的文件,都需要設(shè)定一個主鍵名稱,設(shè)定該主鍵名稱的作用在于兩個方面:
(1)用于分頁(有的數(shù)據(jù)庫可能不需要知道主鍵就可以分頁,比如Oracle)
(2)用于增量導(dǎo)出。
到目前為止,連接分為兩種類型--數(shù)據(jù)庫類型和文件類型。對于數(shù)據(jù)庫類型的連接,可以用連接字符串來標(biāo)志;對于文件類型的連接,可以使用文件路徑來標(biāo)志。
我們知道,數(shù)據(jù)庫分為不同的類型,這是由DataBaseType標(biāo)志的;那么,文件也有不同的類型,比如.Xml、.Txt等,怎么區(qū)分它們了?是的,使用文件的擴展名,因為同一類型的文件的擴展名是相同的。所以,我們看到FileConnection有個ExtendName屬性。
ConnectionText屬性,就像ToString()方法一樣,這樣當(dāng)我們需要在UI上顯示IConnection時,可以取用其ConnectionText屬性的值。對于文件類型的連接,它將返回文件路徑;對于數(shù)據(jù)庫類型的連接,它將返回連接字符串及目標(biāo)數(shù)據(jù)表的名字。
下面是FileConnection和DatabaseConnection的類圖:
講到這里,我可以大致說一下IDataPipeFactory創(chuàng)建數(shù)據(jù)管道的過程。首先,從IConnection中獲取ConnectionType,如果是文件類型,則將之向下轉(zhuǎn)換到FileConnection,然后得到ExtendName屬性,最后在數(shù)據(jù)管道插件列表中尋找支持該ExtendName的數(shù)據(jù)管道插件。對于數(shù)據(jù)庫類型的IConnection,過程也是相似,只不過,它是依據(jù)DataBaseType來尋找對應(yīng)的數(shù)據(jù)管道插件。
如果和數(shù)據(jù)管道插件對照起來看,就更清楚了:
連接對(ConnectionPair),一個連接對包含了一個數(shù)據(jù)源和一個數(shù)據(jù)目標(biāo)的連接信息。將連接對獨立出來的好處是,當(dāng)配置好一個連接對后,可以在不同的地方復(fù)用它,比如在編輯映射的時候、在數(shù)據(jù)驗證的時候、在數(shù)據(jù)傳送的時候等。
使用ConnectionPair可以使我們的程序結(jié)構(gòu)非常的清晰,因為它抽象了底層的連接類型。但是,在通過界面來配置ConnectionPair時,就不那么容易了,你會迫不得已的遇到很多向下轉(zhuǎn)換,我正在思考一種解決方案來避免這種向下轉(zhuǎn)換。你有好的想法嗎?
轉(zhuǎn)到:
DTS開發(fā)記錄(序)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
