2017-09-25 319 views
0

我正在試圖爲我的所有軟件包建立一個到數據庫的動態連接。我試圖通過使用腳本組件加載用戶定義的變量來實現這一點。SSIS動態連接字符串

我知道我也可以使用環境變量來做到這一點,問題是不是我所有的軟件包都會被調度,有些是我使用web服務或過程運行的,所以我不能使用調度工作要做到這一點,並使用@reference_id維護有點複雜。

我不知道如何循環變量。我試圖

的foreach(在變量變量VAR)

但是,這不是辦法..
所以我這裏有兩個問題:

  • 如何循環中的所有變量我通過?
  • 如何從中獲取變量名稱? (我在Variables.VarName上看不到名稱屬性?)

E.G. OLE DB源將返回兩行:

conName | conString 
con1 | someConnection 
con2 | someConnection 

而且我的項目中有兩個用戶定義的變量 - > con1和con2。 因此,遍歷我的變量 - > foreach(變量),如果var.name = row.conName,用row.conString值加載。

+0

Variables.YourVarialbName – plaidDK

+0

@plaidDK它應該是動態的。變量名稱可以改變,這就是爲什麼我需要循環它們。 – sagi

+0

但你不能循環變量,除非它的對象 – plaidDK

回答

1

最後我設法做到了這一點。對於那些你們誰想要做同樣的,這裏是我做過什麼:

public class ScriptMain : UserComponent 
{ 

    Dictionary<string, string> AllCons = new Dictionary<string, string>(); 

    public override void PostExecute() 
    { 
     base.PostExecute(); 
     string connectionString; 

     foreach (IDTSVariable100 obj in ReadWriteVariables) 
     { 
      if (AllCons.TryGetValue(obj.QualifiedName, out connectionString)) 
      { 
       obj.Value = connectionString; 
      } 
     } 
    } 

    public override void Input0_ProcessInputRow(Input0Buffer Row) 
    { 
     AllCons.Add("User::" + Row.ConName, Row.ConString); 
    } 
} 

我用了一個Dictionary對象連接名稱和連接字符串存儲在Input0_ProcessInputRow部分。然後,在PostExecute中,我使用一個IDTSVariable100對象遍歷所有用戶定義的變量。然後我檢查,如果連接名稱等於變量,則將連接字符串放入其中。

希望它可以幫助別人。

+0

很高興你有它的工作。你可以像我在網上發佈的鏈接一樣。你把你的對象設置爲數據表:) – plaidDK