请参阅以下代码片段:
Dim fuzzyLookup As IDTSComponentMetaData100 = pipeline.ComponentMetaDataCollection.[New]()
fuzzyLookup.ComponentClassID = "{5056651F-F227-4978-94DF-53CDF9E8CCB6}"
Dim destDesignTimeComponentFuzzy As IDTSDesigntimeComponent100 = fuzzyLookup.Instantiate()
destDesignTimeComponentFuzzy.ProvideComponentProperties() 'line 4
我导入了以下命名空间:
Microsoft.SqlServer.Dts.Runtime
Microsoft.SqlServer.Dts.Pipeline.Wrapper
Microsoft.SqlServer.Dts.Runtime.Wrapper
我添加了以下参考资料:
Microsoft.SQLServer.dtspipelinewrap.dll
Microsoft.SQLServer.dtsruntimewrap.dll
Microsoft.SQLServer.manageddts.dll
当我添加32位引用时,整个代码都会运行,但是没有任何反应,即package.execute什么也不做 - 模糊查找不起作用(因此我相信:https://connect.microsoft.com/SQLServer/feedback/details/634516)
因此我尝试在上面的3个DLL中添加64位引用。然后我在代码的第4行得到一个例外:HRESULT:0xC0048021。为什么我在64位模式下会出现此异常?
我所做的研究表明组件类ID是错误的。 64位模糊查找是否有不同的组件类ID?
更新07/10/15
我已经运行了以下代码:
Public Shared Sub LoopComponents()
Dim fileName As String = "C:\Development\ProgrammaticLookup\64Bit.txt"
Dim application As New Application()
Dim componentInfos As PipelineComponentInfos = application.PipelineComponentInfos
Dim i As Integer = 0
For Each componentInfo As PipelineComponentInfo In componentInfos
i = i + 1
Using fs As New FileStream(fileName, FileMode.Append, FileAccess.Write)
Using sw As New StreamWriter(fs)
sw.WriteLine(componentInfo.Name + vbTab + componentInfo.CreationName)
End Using
End Using
Next
Console.Read()
End Sub
当我以32位模式运行上面的代码时,日志文件中添加了42个条目,包括:模糊查找DTSTransform.BestMatch.2
当我以64位模式运行代码时,日志文件中只添加了11个条目。模糊查找不是其中一个条目。为什么64位模式中缺少组件?
答案 0 :(得分:0)
您使用的是SQL Server 2012还是更高版本?如果是这样,您可能正在使用DTSX2,并且看起来模糊查找的类ID为{E4A5F949-EC93-45AB-8B36-B52936257EC2}
,根据this document - 第258页。
有关DTSX和DTSX2差异的概述,check here。