簡體   English   中英

SSIS:C#腳本任務:如何根據運行dtsx的服務器環境更改SQL連接字符串?

[英]SSIS: C# Script task: How to change a SQL connection string based on server environment that the dtsx is running on?

我有一個腳本任務,我更改了數據庫的連接字符串,但是,它缺少一個重要的信息,它是運行包本身的服務器。

有沒有辦法從ac#script中檢索服務器的名稱?

我知道在sql我可以選擇@@ servername,但我需要包來檢查它運行的服務器的名稱(dtsx)不是sql server。

我知道這是一個奇怪的請求,但有很多選擇,這里是我正在研究的那些:

+Through A Batch CMD whose results i could store in a pkg level variable
+Through a c# script
+SQL if it is possible

任何其他人都知道的方式將不勝感激。

編輯/更新:我發現了幾種方法:

C#: public string host = System.Environment.MachineName.ToString();
cmd: hostname  ...-->then store in pkg variable

雖然您可以使用.NET獲取服務器名稱,但傳統的SSIS方式是使用預先存在的“System :: MachineName”包變量(另外,請注意您可能必須單擊“顯示系統變量”按鈕在包變量窗口中看到它。)假設SSIS 2008和C#(2005 / VB提供相同的變量):

1)將變量名稱“System :: MachineName”(不帶引號)添加到腳本任務編輯器ReadOnlyVariables屬性

2)在腳本內部,您可以像這樣訪問變量:

Dts.Variables["System::MachineName"].Value.ToString()

希望能幫助到你。 克里斯蒂安

克里斯蒂安有適當的解決方案,使用原生變量,並跳過你試圖下降的復雜道路。 我不想對他們的帖子進行如此嚴格的編輯,但想到截圖有助於加強答案。

如果您沒有在包中創建任何變量,那么這就是您的默認變量窗口的樣子

SSIS變量窗口,默認視圖

單擊灰色X圖標,將顯示可用的系統變量及其當前值。 某些值在創建時設置 - CreatorName,CreatorComputerName; 其他因事件而更改(保存自動增量VersionBuild); 還有一些因為正在執行的包(StartTime,ContainerStartTime,MachineName等)而發生變化

顯示系統變量的SSIS變量窗口

最后,請注意一些系統變量是依賴於上下文的。 正如您在范圍中看到的那樣,OnError系統變量會暴露諸如ErrorCode,ErrorDescription等內容。

On Error事件變量

在SQL Query任務之前創建一個新的腳本任務。 使用腳本任務更新ConnectionString(假設您的連接名稱為“SQLConnection”:

Dts.Connections("SQLConnection").ConnectionString = "Data Source =" + System.Environment.MachineName.ToString() + ";Initial Catalog =myDataBase; Integrated Security =SSPI;"; 

我記得UI在設置此變量的位置和時間方面受到特別限制,但我過去已經這樣做了。 如果您遇到問題,請告訴我。

我之前使用過一個環境變量(windows),我的包在啟動時讀取,得到的是連接字符串! 您可以使用程序包配置來實現此目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM