我有一个执行SQL任务的SSIS包,以获取需要连接的服务器的名称。然后,该查询的结果存储在一个名为“服务器”的变量对象中。然后,我想一次在每个服务器上运行另一个程序包,因此我想拆分“ servers”变量。但是,当我在C#脚本任务中执行此操作时,会不断收到错误消息:
错误:脚本任务处的错误为0x1:调用的目标抛出了异常。
以下是拆分服务器变量的代码:
错误:脚本任务处的错误为0x1:调用的目标抛出了异常。
public void Main()
{
var serverlist = (string[])Dts.Variables["User::servers"].Value;
Dts.Variables["server1"].Value = serverlist[0];
Dts.TaskResult = (int)ScriptResults.Success;
}
这应该是一个非常简单的代码,但是由于某些原因,它根本无法正常工作。
答案 0 :(得分:1)
自从您提到过:
我有一个执行SQL任务的SSIS程序包,以获取服务器名称
主要问题在以下几行:
var serverlist = (string[])Dts.Variables["User::servers"].Value;
Execute SQL Task不返回字符串列表,而是返回一个记录集对象。为了在脚本任务中阅读它,您必须遵循以下文章(您必须使用OledbAdapter):
答案 1 :(得分:0)
ConnectionStringOle
ConnectionString
属性设置为ConnectionStringOle
值。从那里开始,执行每个循环迭代所需的操作。
注意:如果仅提取服务器实例的名称,则应创建另一个程序包变量,以将实例的名称解析为整个ConnectionString
值。您可以通过将现有ConnectionString的值复制到变量表达式中来获得此功能。
答案 2 :(得分:0)
从问题的标题开始,您似乎正在尝试从SSIS对象变量填充C#列表。如果正确,则可以执行以下操作。您可以用SSIS对象变量的内容填充INFO - lqk4061 executed the pipeline at 2019-05-29 19:15:47
Logging in a loop - loop #0
对象,或者如果您要使用特定的列表,则可以从/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 5;
填充列表,然后可以使用该列表在这之后。在下面的示例中,DataTable
用于使用DataTable
方法从SSIS对象变量填充OleDBDataAdapter
对象。从对象变量填充的数据可以通过DataTable
中的Fill
对象进行访问。由于SSIS对象变量看起来只包含一个列,因此可以从下面每个DataRow
,DataTable
的列索引0访问它。您可能已经完成了此操作,但是请确保SSIS对象变量位于脚本任务的DataRow
字段中。
dr[0]