Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免“动态”中的错误;“执行包任务”;在SSIS中?_C#_Ssis - Fatal编程技术网

C# 如何避免“动态”中的错误;“执行包任务”;在SSIS中?

C# 如何避免“动态”中的错误;“执行包任务”;在SSIS中?,c#,ssis,C#,Ssis,在SSIS中,我有一个执行包任务,通过Expressions属性中的PackageName属性动态调用包。基本上,对于我目录中的每个文件,使用相同的名称调用包。我的问题是,在某些情况下,目录中的一个或一些文件可能没有与之关联的包,这将始终导致错误。我怎样才能先发制人地捕捉到这个错误并加以处理,使这个过程不会完全停止 我想到的解决方案是使用一个脚本任务,在该任务中,我可以迭代项目中所有可用的包,并将其与Foreach循环中的当前文件进行比较,如果当前文件不存在这样的包,我将跳过尝试处理它。然而,我

在SSIS中,我有一个执行包任务,通过Expressions属性中的PackageName属性动态调用包。基本上,对于我目录中的每个文件,使用相同的名称调用包。我的问题是,在某些情况下,目录中的一个或一些文件可能没有与之关联的包,这将始终导致错误。我怎样才能先发制人地捕捉到这个错误并加以处理,使这个过程不会完全停止

我想到的解决方案是使用一个脚本任务,在该任务中,我可以迭代项目中所有可用的包,并将其与Foreach循环中的当前文件进行比较,如果当前文件不存在这样的包,我将跳过尝试处理它。然而,我无法轻松找到一种方法来枚举我的项目的包名。我试图通过中介绍的方法来实现它,但我似乎无法实现我的目的(我现在还没有在服务器上部署它,我想这就是它所说的我应该做的,但我觉得我不需要仅仅为了实现这一点)


有没有办法使用脚本任务检查我的项目是否存在包名?或者,通常有什么方法可以先发制人地捕获此错误,以便允许项目继续运行?

蛮力方法是将所有
MaximumErrorCount
属性设置为0,然后包将永远不会因失败而停止

正确的设计模式是,如果包不存在,就不要尝试调用它。您可以在循环中创建分支逻辑,仅在包存在时调用
executepackage任务

首先,创建一个布尔变量,我将调用我的
PackageExists

然后在
Foreach循环容器中创建一个任务来检查包的存在。我使用一个版本的查询billinkc作为另一个问题的答案。您还可以使用
脚本任务
,并使用所描述的C#方法。无论哪种方式,您都希望为
User::PackageExists
分配一个布尔值

接下来,创建两个
序列容器
。单击第一个,并向其添加新的
表达式
属性。将
Disabled
属性值设置为一个表达式,该表达式检查
User::PackageExists
FALSE
值。此容器将保存您的
执行包任务

单击第二个
序列容器
并执行相同操作,但检查
TRUE
值。在这个容器中,我选择将另一个变量设置为缺少的包名。我可以在后续的
executesql任务中使用它来记录丢失的包名。你可以在这里做任何你想做的事,包括让这个容器空着。

我的最后一个
Foreach循环容器
如下所示:

这很好,也很彻底,尽管我一直停留在我们正在检查包存在的那部分,在那里你有两个链接。我还没有部署这个项目;它仍然保存在本地。第一个链接是查询我的项目不存在的数据库。我认为第二个链接的解决方案更可行,但鉴于我的情况,我不确定如何实现该脚本。看起来我仍然需要将项目存储在服务器中。在服务器上保存这些文件是我唯一的选择吗?我想在部署项目之前,您可以检查本地项目开发文件夹中是否存在这些文件。如果我这样做,我可能会首先检查环境,如果是dev,则检查文件,如果是qa/prod/etc,则检查服务器上的文件。