将 SSIS 包转换为 .NET 应用程序?

Posted

技术标签:

【中文标题】将 SSIS 包转换为 .NET 应用程序?【英文标题】:Convert an SSIS package to a .NET application? 【发布时间】:2012-08-11 04:39:04 【问题描述】:

我被要求接管不久前编写的 SSIS 包的所有权。似乎可以进入并修改、编辑和升级此软件包,但对于软件包所做的工作量来说,这似乎也非常麻烦。

我的任务大致是这样的:筛选包,查找特定表中某些特定列的任何使用情况,更改它们以匹配最新的数据库变更集,并写出一些额外的日志数据以帮助团队诊断任何特定问题。

这对我来说似乎令人生畏,因为 SSIS 包包含大约 3 兆字节的文本、SQL 语句和极其简单(但冗长)的代码路径。我已经花了一段时间双击每个 SSIS 对象并浏览其设置以查看我是否可以发现我被要求维护的列,并且 SSIS 不断抛出连接错误(正确的,因为我的开发环境被阻止从生产数据库中关闭)。

我真的很想考虑将此 SSIS 包转换为 .NET 应用程序,但是我找不到任何可以帮助我这样做的工具。

是否有人对维护此 SSIS 包或将其转换为适当的应用程序有建议?

【问题讨论】:

【参考方案1】:

只是为了好玩,我写了一个 SSIS 反编译器。在查看了运行集成服务的 Visual Studio 的 UI 并将其与 .DTSX 文件中的原始 XML 数据进行比较之后,我能够编写一个将 DTSX 文件转换为 C#/.NET 项目的程序。

我将其与一小部分分析数据结合起来,通过追踪有问题的组件,我的 SSIS 包的速度提高了 40%。

对于我使用的 SSIS 包来说似乎工作得很好。也许这会对其他人有所帮助。

https://github.com/tspence/csharp-dessist

【讨论】:

遗憾的是,我尝试了它并收到了许多关于 Microsoft.ExecuteSQLTask、Microsoft.Pipeline 和 Microsoft.ScriptTask 的“我还不知道如何处理”错误。不过理论上是个好主意。【参考方案2】:

回复那些更喜欢 .NET 而不是 SSIS 的人

SSIS 并不意味着传输少量数据。它可以做到,但是当数据传输量很大,大约 100 到 500 GB 并且涉及相当复杂的业务逻辑时,SSIS 比 .NET 更可取。如果有多个数据文件和多个数据源,那么 SSIS 是不错的选择。如果您有少量的导入或导出,并且用于增强或转换数据的业务逻辑很少,则首选 .Net

不幸的是,没有工具可以将您的 ssis 包转换为 .NET 应用程序,但是有免费工具可以帮助您在不打开包的情况下提供有关包的更多信息。

BI Documentor 是一个工具,它为您提供 SSIS 包的完整架构。您只需将应用程序指向您的 dtx pkg。如果您有大量的 sql 代码和表达式、变量、连接管理器,您需要修改它们,你可以借助这个工具来做到这一点。有时在 BIDS 中打开一个复杂的 ssis 包需要很长时间,所以这在这种情况下可能很有用。

还有一个名为 SSIS Log Analyser 的工具可以帮助您在不打开 BIDS 的情况下调试您的包

【讨论】:

谢谢 - 这似乎是我所能得到的。我会查看 BI Documentor 看看是否有帮助。 谁更喜欢?我的偏好正好相反。 如果它涉及到一个相当复杂的业务逻辑那么它当然不应该在SSIS中。业务逻辑不应该无处不在,我见过人们将业务逻辑放在应用程序中,在程序中,在触发器中,我不敢相信现在有人希望在任何地方都有业务逻辑,最好将其隔离在一个中地点。【参考方案3】:

我不认为有任何特定的工具可以做到这一点。最好只使用一些文本编辑器并浏览代码并识别您必须处理的更改的列。

就我个人而言,我不喜欢 SSIS,因为它过于“可视化工具”,并且可能会与 .NET 应用程序一起使用,但既然您已经完成了所有工作,并且您可能不想将您的重建你所获得的数据转换工具的职业生涯,只需在 SSIS 中进行这些更改,使其工作,然后继续你快乐的编程生活......或者更好的是,找一些 SQL Server 管理员为你做这件事,他们喜欢 SSIS。

【讨论】:

这很符合我的建议,我同意你的看法。

以上是关于将 SSIS 包转换为 .NET 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# .NET 中运行 SSIS 包

SSIS包写入CRM 2011数据类型错误

SSIS 中的 Merge Join 和 Lookup 转换有啥区别?

对于 SSIS 跨进程通信,我都有哪些选择?

在 SSIS 中将日期 DD.MM.YYYY hh:mm:ss 转换为 YYYY-MM-DD

将消息从 SSIS (2012) 包推送到 ASP.NET Web 应用程序中的 SignalR 集线器——最好的方法是啥?