如何获取解决方案中所有SSIS包的所有错误

4
在Visual Studio 2015中,我有一个包含3打 dtsx 文件的解决方案,这些文件位于SSIS Packages文件夹中。我重新生成了该解决方案,并且成功了。仅当我逐个打开单个dtsx时,我才注意到其中一些(不是全部)实际上存在多个问题。
是否有办法在错误列表中获取这些问题的列表,还是我需要逐个打开所有dtsx?
1个回答

5
很遗憾,没有办法在集成服务解决方案(在Visual Studio中)中实现这一点,而不打开包或使用DTExec Utility执行它们。但是你可以通过以下解决方法进行检查程序错误: 解决方法
  1. I created a winforms application using visual studio (using Vb.Net)
  2. I added Microsoft.SqlServer.DTSPipelineWrap and Microsoft.SQLServer.ManagedDTS as references
  3. I used the following code to loop over packages in a specific directory, validate, and get errors into a log file:

    Dim strPackagesDirectory As String = "C:\Users\Admin\Desktop\New folder"
    Dim strOutputLogFile As String = "D:\1.txt"
    
    For Each strFile As String In IO.Directory.GetFiles(strPackagesDirectory, "*.dtsx", IO.SearchOption.TopDirectoryOnly)
    
        Dim pckg As New Microsoft.SqlServer.Dts.Runtime.Package
        Dim app As New Microsoft.SqlServer.Dts.Runtime.Application
    
        pckg = app.LoadPackage(strFile, Nothing)
        Dim obj = pckg.Validate(Nothing, Nothing, Nothing, Nothing)
    
        If pckg.Errors.Count > 0 Then
    
            Using sr As New IO.StreamWriter(strOutputLogFile, True)
                sr.WriteLine("")
                sr.WriteLine(strFile)
                sr.WriteLine("--------------")
                For Each err As Object In pckg.Errors
    
    
                    sr.WriteLine(err.Description)
    
                Next
    
                sr.WriteLine("==========")
                sr.Close()
            End Using
    
        End If
    Next
    

References


1
似乎for循环中缺少了“next”。除了这个小错别字之外,它运行得非常好。它运行得非常好,以至于当我直接打开dtsx文件时,它甚至可以写入我看不到的错误! - Johannes Wentu
我可以问一下你的代码出现了哪些验证错误吗?我希望能看到与我直接打开dtsx时发现的相同错误。但事实是,几乎所有的dtsx都出现了同样的错误:“连接'{some guid}'未找到”。当找不到特定连接元素时,这个错误由Connections集合抛出。只有具有相应CM的dtsx会出现这个问题……但它们都可以正常工作!在它们的代码中,我看到请求了此guid但从未声明过。为什么VS没有提示这个问题,而dtsx却运行良好? - Johannes Wentu
@JohannesWentu 看起来Validate方法需要一些参数。我会搜索一个例子。 - Hadi
也许可以通过第一个参数传递我的包的连接列表,并且验证过程将考虑它们。 - Johannes Wentu
我成功获取了项目的 ConnectionManagerItems,并且看到了 ConnectionManagers(即使它们似乎缺少 GUID)。我无法将这些 ConnectionManagersItems 强制转换为 DTS.Runtime.Connections......,因为它似乎是密封的并且我无法创建它。 - Johannes Wentu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接