我正在将数据仓库从SQL Server 2008R2升级到2017。升级后,每个脚本任务在尝试连接到日志数据库时都会抛出相同的错误。
该任务通过OLEDB连接管理器连接到数据库,然后将一些元数据写入日志表。它无法建立初始连接。我希望这是一个相当简单的调用错误,但我是一个SQL人,不是VB人,我没有看到这个问题。
我发现了这个问题,
Missing library to reference OLEDB connection types
,但脚本没有调用AcquireConnection()方法,因此我认为它不适用。或者如果是的话,我不知道怎么做。
这是代码,通过失败点。
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Data.OleDb
Imports System.Collections
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
Public Sub Main()
Dim fireAgain As Boolean
Dim pkgExecVar As Variables
Dim cm As ConnectionManager
Dim cmParam As IDTSConnectionManagerDatabaseParameters100
Dim conn As OleDb.OleDbConnection
Dim cmd As OleDbCommand = New OleDbCommand()
pkgExecVar = Nothing
cm = Dts.Connections("Configuration_Metadata_Logging")
cmParam = CType(cm.InnerObject, IDTSConnectionManagerDatabaseParameters100)
conn = CType(cmParam.GetConnectionForSchema(), OleDb.OleDbConnection)
当我单步执行代码时,底部的第二行抛出异常。
cmParam = CType(cm.InnerObject, IDTSConnectionManagerDatabaseParameters100)
System.InvalidCastException系统
HResult=0x80004002
Message=无法将“System.\u coobject”类型的COM对象转换为接口类型“Microsoft.SqlServer.Dts.Runtime.Wrapper.idtsconnectionmanagerdatabaseparameters 100”。此操作失败,因为对IID为{624862CB-55F9-4A92-965F-62BC4935296A}的接口的COM组件的QueryInterface调用失败,原因是出现以下错误:不支持此类接口(HRESULT的异常:0x80004002(E_No interface))。
如果还有什么我可以补充的问题,请让我知道。
编辑:OLEDB连接管理器正在使用SQLNCLI11.1。包的其他组件(执行SQL&Dataflow任务)能够成功连接。
EDIT II:为了使这个更易于搜索,下面是包抛出的初始错误,然后向脚本任务添加断点并单步执行它。
调用的目标引发了异常。
at System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[]参数,签名sig,布尔构造函数)
在System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object[]参数,Object[]参数)
在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、绑定标志invokeAttr、绑定绑定器、对象[]参数、文化信息区域性)
位于System.RuntimeType.InvokeMember(字符串名称、BindingFlags BindingFlags、绑定绑定器、对象目标、对象[]providedArgs、参数修改器[]修饰符、文化信息区域性、字符串[]namedParams)
在Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()