SSIS:C#脚本任务:如何根据运行dtsx的服务器环境更改SQL连接字符串?

时间:2011-09-23 15:47:46

标签: c# ssis

我有一个脚本任务,我在其中更改了数据库的连接字符串,但是,它缺少一个重要的信息,即运行包本身的服务器。

有没有办法从c#脚本中检索服务器的名称?

我知道在sql中我可以选择@@ servername,但是我需要包检查它运行的服务器名称(dtsx),而不是sql服务器。

我知道这是一个奇怪的请求,但有很多选择,这里是我正在研究的那些:

+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

4 个答案:

答案 0 :(得分:5)

虽然您可以使用.NET获取服务器名称,但传统的SSIS方式是使用预先存在的“System :: MachineName”包变量(另外,请注意您可能必须单击“显示系统”变量“按钮在包变量窗口中查看它。)假设SSIS 2008和C#(2005 / VB提供相同的变量):

1)将变量名称“System :: MachineName”(不带引号)添加到脚本任务编辑器ReadOnlyVariables属性

2)在脚本中,您可以像这样访问变量:

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

希望它有所帮助。 克里斯蒂安

答案 1 :(得分:3)

克里斯蒂安有适当的解决方案,使用原生变量并跳过你试图摧毁的错综复杂的道路。我不想对他们的帖子进行如此严格的编辑,但想到截图有助于加强答案。

如果您没有在包中创建任何变量,那么这就是您的默认变量窗口

SSIS variable window, default view

单击灰色X图标,将显示可用的系统变量及其当前值。某些值在创建时设置 - CreatorName,CreatorComputerName;其他因事件而更改(保存自动增量VersionBuild);还有一些因为正在执行的包(StartTime,ContainerStartTime,MachineName等)而发生变化

SSIS variable window showing System variables

最后,请注意一些系统变量是依赖于上下文的。正如您在范围中看到的那样,OnError系统变量会暴露诸如ErrorCode,ErrorDescription等内容。

On Error event variables

答案 2 :(得分:1)

在SQL查询任务之前创建一个新的脚本任务。使用脚本任务更新ConnectionString(假设您的连接名称为“SQLConnection”:

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

我记得UI对设置此变量的位置和时间特别严格,但我过去已经这样做了。如果您遇到问题,请告诉我。

答案 3 :(得分:1)

我之前使用过一个环境变量(windows),我的包在启动时读取,并从中获取连接字符串! 您可以使用包配置来实现此目的。