【问题标题】:script component missing oracle reference脚本组件缺少 oracle 参考
【发布时间】:2024-01-24 03:24:01
【问题描述】:

我尝试使用脚本组件并将一些数据插入 Oracle 数据库,但我遇到了以下问题。

无法加载文件或程序集“Oracle.ManagedDataAccess, 版本=4.122.1.0,文化=中性,PublicKeyToken=89b483f429c47342' 或其依赖项之一。系统找不到指定的文件。


在 ScriptMain.Input0_ProcessInputRow(Input0Buffer Row) 在 UserComponent.Input0_ProcessInput(Input0Buffer 缓冲区) 在 UserComponent.ProcessInput(Int32 InputID, String InputName, PipelineBuffer 缓冲区,OutputNameMap OutputMap) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponent.ProcessInput(Int32 InputID,PipelineBuffer 缓冲区)在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer 缓冲区)

谷歌搜索后,我认为我的问题应该与this issue. 相同,我复制了 Oracle.ManagedDataAccess.dll C:\Program Files (x86)\Oracle Developer Tools for VS2017\odp.net\managed\common\Oracle.ManagedDataAccess.dll

C:\Windows\程序集

C:\Windows\程序集\GAC

按照上一个链接中的建议。但我再次面临同样的问题。你介意告诉我我错过了什么吗?

我正在使用 SSIS2017。

【问题讨论】:

    标签: c# oracle ssis


    【解决方案1】:

    这是错误的,您不应该手动将文件复制到C:\Windows\assembly。请注意,从 .NET Framework 4 开始,全局程序集缓存的默认位置是 %windir%\Microsoft.NET\assembly

    • 要么将 DLL 复制到应用程序可执行文件的文件夹中。
    • 或将其添加到 GAC(全局程序集缓存)。这是使用工具gacutil.exe 完成的。我假设每个设置工具还提供一个选项“添加到 GAC”。您也可以使用...\odp.net\managed\x64\OraProvCfg.exe 和/或...\odp.net\managed\x86\OraProvCfg.exe
    • 还有一些可以放置 DLL 的位置(请参阅 Probing the Application Base and Culture Directories),但是应用程序的根目录是标准的。

    【讨论】:

    • @Wernfired:感谢您的快速回复。关于第一点,“要么将 dll 复制到应用程序可执行文件的文件夹中”=> 我们正在谈论 SSIS 包,我正在调试模式下测试我的应用程序,你希望我将 dll 放在确切的位置吗?
    • gacutil,exe所在的位置,我没找到。
    • 转到开始菜单 -> Microsoft Visual Studio 2017 -> Visual Studio 工具 -> VS 的开发人员命令提示符。你应该在那里找到它。
    • Tq 这么多,看来它正在工作...我在 VS 方向上使用并从开发人员命令提示符运行 gacutil.exe /i "c:\program files (x86)\Oracle Developer Tools对于 VS2017\odp.net\managed\common\Oracle.ManagedDataAccess.dll"