• DTS开发记录(3)-- 连接与连接对


         在 DTS开发记录(2)-- 数据管道及插件 一文中,我们介绍了数据管道,IDataPipeFactory的CreateDataPipe方法需要一个IConnection参数,这个参数就表示一个连接。

    public IDataPipe CreateDataPipe(IConnection conn)

        IConnection的定义如下:

        /// <summary>
        
    /// IConnection 用于表示到数据源或数据目标的连接
        
    /// </summary>
        public interface IConnection
        {
            ConnectionType ConnectionType { 
    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开发记录(序)

  • 相关阅读:
    27. 移除元素
    LeetCode---9.回文数
    PAT 1098 Insertion or Heap Sort (25)
    PAT 1146 Topological Order
    PAT 1147 Heaps(30 分)
    数据结构 二分查找1
    数据结构 树
    PAT 1126 Eulerian Path
    PAT 1111 Online Map (30)
    PAT 1072 Gas Station (30)
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/442548.html
Copyright © 2020-2023  润新知