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

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