Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS从2008R2升级到2017-连接到OLEDB数据源时脚本任务失败_Sql Server_Vb.net_Ssis_Sql Server 2017_Ssis 2017 - Fatal编程技术网

Sql server SSIS从2008R2升级到2017-连接到OLEDB数据源时脚本任务失败

Sql server SSIS从2008R2升级到2017-连接到OLEDB数据源时脚本任务失败,sql-server,vb.net,ssis,sql-server-2017,ssis-2017,Sql Server,Vb.net,Ssis,Sql Server 2017,Ssis 2017,我正在将数据仓库从SQL Server 2008R2升级到2017。升级后,每个脚本任务在尝试连接到日志数据库时都会抛出相同的错误 该任务通过OLEDB连接管理器连接到数据库,然后将一些元数据写入日志表。初始连接失败。我希望这是一个相当简单的调用错误,但我是一个SQL专家,不是VB专家,我没有看到这个问题 我发现了这个问题,但是脚本没有调用AcquireConnection()方法,所以我认为它不适用。如果是的话,我不知道怎么做 这是代码,通过故障点 Imports System Imports

我正在将数据仓库从SQL Server 2008R2升级到2017。升级后,每个脚本任务在尝试连接到日志数据库时都会抛出相同的错误

该任务通过OLEDB连接管理器连接到数据库,然后将一些元数据写入日志表。初始连接失败。我希望这是一个相当简单的调用错误,但我是一个SQL专家,不是VB专家,我没有看到这个问题

我发现了这个问题,但是脚本没有调用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)
System.InvalidCastException HResult=0x80004002 Message=无法将类型为“System.\u ComObject”的COM对象强制转换为接口类型“Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100”。此操作失败,因为对IID为“{624862CB-55F9-4A92-965F-62BC4935296A}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT的异常:0x80004002(E_NOINTERFACE))

如果还有什么我可以补充的问题,请让我知道

编辑:OLEDB连接管理器正在使用SQLNCLI11.1。包的其他组件(执行SQL和数据流任务)能够成功连接

编辑II:为了使其更具可搜索性,在向脚本任务添加断点并单步执行之前,包会抛出一个初始错误

调用的目标已引发异常

位于System.RuntimeMethodHandle.InvokeMethod(对象目标、对象[]参数、签名符号、布尔构造函数) 位于System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象obj,对象[]参数,对象[]参数) 在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性) 位于System.RuntimeType.InvokeMember(字符串名称、BindingFlags BindingFlags、绑定器绑定器、对象目标、对象[]提供的参数、参数修改器[]修饰符、CultureInfo区域性、字符串[]namedParams) 位于Microsoft.SqlServer.Dts.Tasks.ScriptTask.vstatasksscriptingengine.ExecuteScript()处


更新。我找到了代码的源代码,这是马特·梅森的一篇博客文章。它仍然没有文档记录,可能在SQL 2008和2017之间的某个时间被破坏

此处记录了支持的方法:

在脚本任务中获取System.Data.OleDbConnection的唯一方法是

1) 要使用ADO.NET连接管理器并将其配置为使用用于OleDb的ADO.NET提供程序,请执行以下操作:

 Dim cm As ConnectionManager = Dts.Connections("Configuration_Metadata_Logging_adonet_oledb")
 Dim conn As OleDb.OleDbConnection = CType(cm.AcquireConnection(Nothing), OleDb.OleDbConnection)
2) 使用OleDb连接Mamanger并使用其ConnectionString创建新的OleDb连接(您还负责在脚本任务中关闭该连接)。像这样:

Dim cm2 As ConnectionManager = Dts.Connections("Configuration_Metadata_Logging_oledb")
Using conn2 As New OleDb.OleDbConnection(cm2.ConnectionString)
    conn2.Open()

End Using

更新。我找到了代码的源代码,这是马特·梅森的一篇博客文章。它仍然没有文档记录,可能在SQL 2008和2017之间的某个时间被破坏

此处记录了支持的方法:

在脚本任务中获取System.Data.OleDbConnection的唯一方法是

1) 要使用ADO.NET连接管理器并将其配置为使用用于OleDb的ADO.NET提供程序,请执行以下操作:

 Dim cm As ConnectionManager = Dts.Connections("Configuration_Metadata_Logging_adonet_oledb")
 Dim conn As OleDb.OleDbConnection = CType(cm.AcquireConnection(Nothing), OleDb.OleDbConnection)
2) 使用OleDb连接Mamanger并使用其ConnectionString创建新的OleDb连接(您还负责在脚本任务中关闭该连接)。像这样:

Dim cm2 As ConnectionManager = Dts.Connections("Configuration_Metadata_Logging_oledb")
Using conn2 As New OleDb.OleDbConnection(cm2.ConnectionString)
    conn2.Open()

End Using

查看您的OLEDB连接,确保它使用的是数据库所在的SQL Server版本的正确提供程序。可能它会自动将提供程序升级到比您更新的版本。@TabAlleman,OLEDB连接管理器正在使用SQLNCLI11.1。包的其他组件(执行SQL和数据流任务)能够成功连接,这也是我添加到问题中的。好主意,我以前没有验证过。查看您的OLEDB连接,确保它使用的是数据库所在的SQL Server版本的正确提供程序。可能它会自动将提供程序升级到比您更新的版本。@TabAlleman,OLEDB连接管理器正在使用SQLNCLI11.1。包的其他组件(执行SQL和数据流任务)能够成功连接,这也是我添加到问题中的。好主意,虽然我以前没有验证过。我不知道VB的boo,但连接管理器是另一回事。这绝对是OLEDB连接。不过,你提出了一个很好的观点。这些软件包已经在08R2上运行多年了,但我还没有同时完成当前代码和转换前代码。我想知道升级是否给我带来了一些我完全错过的东西。我现在是手机用户,但当我回到电脑前,我会看看这种可能性。我找到了这种模式的来源并更新了答案。谢谢你找到了那篇博文。有点像一把冒烟的枪。不方便的是,当这些连接在新服务器上运行时,它们仍然可以工作,但在我的本地机器上却不能。所以我仍然认为“正确”是很重要的,但是做这件事的紧迫性被抛到了窗外。不过,这仍然是一个可靠的答案。我对VB不太了解,但连接管理器是另一回事。这绝对是OLEDB连接。不过,你提出了一个很好的观点。这些软件包已经在08R2上运行多年了,但我还没有同时完成当前代码和转换前代码。我想知道升级是否给我带来了一些我完全错过的东西。我现在是手机用户,但当我回到电脑前,我会看看这种可能性。我找到了这种模式的来源并更新了答案。谢谢你找到了那篇博文。索尔