我是 SSIS / C# 的新手(我通常是 Java 开发人员),如果这是一个非常愚蠢的问题,我深表歉意。
本质上问题是这样的:我有两个数据流任务,它们加载数据并将它们导出为传统的平面文件格式。格式化由脚本任务 (C#) 完成。
我想做的是在两者之间共享一些通用代码。例如,我可以创建一个公共基类,然后为我的两个不同的脚本任务扩展它。
然而,SSIS 似乎并没有真正为此做好准备。
有谁知道是否有办法完成我想做的事情?
我是 SSIS / C# 的新手(我通常是 Java 开发人员),如果这是一个非常愚蠢的问题,我深表歉意。
本质上问题是这样的:我有两个数据流任务,它们加载数据并将它们导出为传统的平面文件格式。格式化由脚本任务 (C#) 完成。
我想做的是在两者之间共享一些通用代码。例如,我可以创建一个公共基类,然后为我的两个不同的脚本任务扩展它。
然而,SSIS 似乎并没有真正为此做好准备。
有谁知道是否有办法完成我想做的事情?
您是对的,没有直接从 SSIS 执行此操作的简单方法。
在最近的一个项目中,我们采用了两种不同的方法,这两种方法都非常有效,具体取决于您需要做什么:
创建一个实用程序类(作为一个简单的类库)并从您的脚本任务中引用它。这与任何其他类型的参考几乎相同。如果您使用 .NET 3.5,请记住您必须在脚本任务中手动更新版本,因为 SSIS 默认为 2.0。我们还发现,如果我们想在实用程序程序集中实现某种方式的可重用性(不依赖于硬编码的变量名等),那么程序包仍然必须有相当多的“设置”样板才能使用实用程序脚本。
创建自定义数据流组件。这是一个更复杂的过程,但最终会在避免代码重复方面做得最好。通常,对实际数据流进行编码非常简单,与脚本组件没有太大区别,但是您需要的各种设置代码往往会使事情变得复杂。当出现问题时,SSIS 也没有太多支持。在我们的项目中进行了大量的侦探工作。
如果您打算大量使用某些东西,并致力于尽可能地摆脱样板代码,那么 2 是首选。如果它在这里和那里的几个地方被使用,请考虑 1 的简单方法。
我很确定可以在 SSIS 脚本中访问 .NET 程序集。所以你可以这样做。请参阅SQL Server Central 上的文章“使用 SSIS 访问 .NET 程序集” 。
我相信您必须创建一个程序集或 Web 服务才能使其正常工作。
这并不能完全解决您的问题,但它确实有助于不必在每次需要时重新创建所有类(我也不想为我当前的项目部署引用的程序集)。首先,您需要一个类的主副本,您可以使用以下相同但相反的过程从现有的脚本任务中复制它们。
打开脚本任务的编辑器并在属性资源管理器上单击项目文件(st_[Guid]),在“属性”窗口中,您将看到项目文件夹位置。(每次编辑脚本任务时都会重新创建此位置)
在资源管理器中,将您的课程复制到此文件夹
在项目资源管理器中,单击“显示所有文件”图标
右键单击您的文件并添加到项目
回答这个问题可能为时已晚,但您可以单击解决方案并在那里添加一个类。然后,当您进入脚本时,您可以说添加现有对象并搜索您之前创建的那个类。对我来说,它位于项目的解决方案中。尚未为此进行部署或任何操作,但至少您可以通过各个脚本访问该类。