程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Integration Services:容器

Integration Services:容器

編輯:關於.NET

容器是Integration Services 包中非常重要的一部分功能,它可以對控制流中的任務進行直觀的劃分與組織,使包的結構簡明扼要、易於管理、易於維護。

在Integration Services 中,主要有以下三種類型的容器: 序列容器(SequenceContainers)、For 循環、Foreach 循環。下面我們將一一介紹這三種容器的使用方法。

(一)、序列容器(SequenceContainers)。

序列容器是一種十分簡單,但使用非常廣泛的容器,它可以對控制流的任務流組件進行結構化處理,把一些業務相關的任務組件,放到一個序列容器中,使整個包看起來更加整潔、美觀,就如同我們家裡的書櫃、衣櫃似的,把不同種類的東西整理在裡面,收藏起來,既美觀,又易於取用。

比如,在一個Integration Sevices包中,包含有財務數據、業務數據。整個包中的任務組件會非常多,如果不對它們進行分組管理,整個包看起來就會比較亂,非常難於管理與維護。相反如果我們將處理財務數據的任務,放入一個序列容器中,將處理業務數據的任務放入另一個序列容器,整個包看起來,就會一目了然,哪些任務是處理財務數據,哪些任務是處理業務數據了,非常清楚。如圖:

不僅如此,如果點擊右上角象箭頭一樣的符號,還可才把這些容器折疊起來,整個包就更加清楚明了,一目了然了。如圖:

(二)For 循環。

For 循環組件,類似於編程語言中的For 循環,當人們需要反復執行同一個工作任務或者一系列工作任務的時候,就需要用到For 循環,它既可以用於有限次循環,也可以用於“無限次循環”,比如我們監控包的運行狀況,當錯誤數據>=5時,包停止運行,並通知管理員;又如監控某個文件夾是否有新文件產生、監控網絡鏈接是否正常、監控服務器的各項指標(Cpu、內存)是否正常等,論詢特定事件是否發生,這就可以設置為無限次循環。

For 循環的使用非常簡單,它主要有三個表達式,分別控制循環的執行和終止,如圖:

按照如圖所示,完成表達式的值,For 循環就算完成了(@ErrorCount 是用戶自定義變量,需要按照上一課的內容,先定義變量,此處才可以使用)。然後再將需要重復執行的任務,拖入For 循環容器中就可以了。

(三)Foreach 循環。

在.net 編程語言中,有一個循環也叫做Foreach ,從語義來講,這兩種循環如出一徹,沒有什麼差異。在Integration Services 中,Foreach 循環是最重要的一種循環,也是使用最頻繁的一種循環,常用於對一個集合對象中的每一個元素,都要進行處理的場景。比如枚舉某一個文件夾下的所有文件,枚舉一個DataTable 中的某一條記錄、枚舉一顆樹(tree )下的每個結點(Node)等。下面我們將Foreach 最常用的兩種類型:Foreach 文件枚舉器、Foreach ADO 枚舉進行簡單的說明。

Foreach 文件枚舉器。

通常情況下,我們需要循環處理某一文件夾下的每一個文件,這時就需要用到Foreach 文件枚舉器了,比如前面我們說到IISLOG的導入,IisLog 文件很多,每天都會產生很多個這樣的文件,如果靠手工一個一個地處理,將很不現實,工作量非常大,如果我們用Foreach 文件枚舉器,就會非常簡單。如圖,打開Foreach 循環編輯器:

Enumerator:Foreach 枚舉類型。在Foreach循環中,有很多種枚舉類型,每一種枚舉類型,就代表著一種使用場景,它們的使用方法也各不相同。每一種枚舉類型的意義及使用方法,請參考官方文檔:http://technet.microsoft.com/zh-cn/library/ms187670(SQL.90).aspx 這裡有非常詳細的說明。

我們選擇“Foreach 文件枚舉器”,然後在枚舉器配置項中,輸入文件夾的位置(注意這裡是文件夾的位置,而不是文件的位置),輸入文件名通配符(如*.log*.txt 等),其它按照默認設置就可以了,如果需要遍歷文件夾下的子目錄,請勾選“遍歷子文件夾”選項。

下一步,選擇“變量映射”,如圖:

點擊“確定”,回到控制流開發面板。

最後,在“連接管理器”中,找到映射log 文件的平面文件連接(IisLog),設置屬性Expressions 的ConnectionString =User::LogFile。

Foreach 文件枚舉器就算完成了,F5就可以達到你你想要的效果了。結果如下:

其中的“文件系統任務”是將處理完成的文件復份到另外一個文件夾,或者刪除,以免重復執行。

Foreach ADO 枚舉器:枚舉表或者表中每一行記錄。

這種枚舉器在日常開發過程中,也用得非常普遍,類似於TSQL中的游標,先Select 出一批數據,存儲在ADO記錄集中,然後再一行一行地處理。

假設有一個商業公司,它在全國或者全市的各個地方,都有連鎖專賣店,每個專賣店都是通過POS進行銷售和收銀,為了保證前端銷售快速穩定地運行,POS系統一般都采用C/S模式,數據與系統程序都存儲在本地。集團公司的中高層主管為了隨時了解各專賣店銷售經營情況,就需要定時或者不定時地將專賣店的數據同步到總部數據中心。

如果我們對每個專賣店DB,都建立一個鏈接,再建立一個對應的同步任務,隨著專賣店的增加,同步任務也隨之增加,到最後,功能類似的同步任務就會越來越多,而且每增加一個專賣店,ETL包都要增加一個任務,管理起來,將非常困難。

根據我的經驗是,在總部數據中心建立一張表,專門配置各專賣店DB的鏈接憑證(ConnectionString),在同步時,先Select 出各DB的ConnectionString ,然後再動態創建DB連接。這樣一來,程序就小巧、穩定多了。下面我們來看看如何實現這一需求:

首先,定義兩個變量,一個於用存儲ConnectionString(字符型);一個用於存儲ADO 記錄 集(Object 型)。如圖:

然後在控制流中增加一個SQL任務,配置如下:

Connection:選擇“數據中心”的鏈接器。

SQLStatement: 輸入如下SQL,以取出所有配置記錄。

SELECT 'Data Source=' + strDBServerIP + ';User ID=' + strDBUserID + 
        ';Initial Catalog=HumanResource;Provider=SQLNCLI10;Auto Translate=True;' AS 
        ConnectionString
FROM DbConfig

ResultSet :選擇“ 完整結果集”。

然後切換到“結果集”,配置結果集選項,如圖:(注意:User::DataSet 一定要是Object 類型的變量,其它變量都不可用)

點擊“確定”,就完成了各DB的連接配置,下面就看Foreach ADO 循環如何來應用這個結果集了。

找開Foreach 循環編輯器,在Enumerator 中選擇“Foreach Ado 枚舉”,如圖:

請注意如圖所示的每一個選項,如果選錯,都可能達不到你想要的效果。

變量映射,如圖:

最後一步,就是將變量映射到OLE DB 的連接上了,從連接管理器中,選擇 DB連接,右擊配置Expressions屬性的ConnectionString =User::ConnectionString ,如圖:

整個Foreach ADO 循環完成了,F5一切如你所願,綠油油的一遍就會呈現在你的眼前。

常用的三種容器就介紹完了,當然還有一些其它容器,比如一個包,是一個容器,一個分組(在控制流中選擇一批任務,右鍵菜單“分組”,就可以將這批任務放在一個Group 內)也是一個容器,但是這些容器都非常簡單,就此略過,不做詳細說明。

在Inegration Services 中,容器還可以嵌套,每個容器都可以相互嵌套,它們可以有各自的作用域,有各自的命名空間,如果我們善加利用,將會為Integration Services 的結構化開發,提供很多的方便。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved