VB.NET连接Oracle 12c时抛出Hotel.dll中FileNotFoundException错误求助
VB.NET连接Oracle 12c FileNotFoundException报错解决方案
报错核心原因
你遇到的System.IO.FileNotFoundException错误是Oracle.DataAccess.Client非托管驱动加载依赖失败导致的,和你编写的数据库连接逻辑无关。
具体排查与解决步骤
- 位数适配校验
Oracle.DataAccess属于非托管ODP.NET驱动,不支持AnyCPU自动适配位数,必须和项目生成目标、本地安装的Oracle客户端/ODAC的位数完全一致。
解决方法:右键项目 → 选择「属性」→ 切换到「生成」选项卡,将目标平台修改为和本地ODAC/Oracle客户端匹配的x86或x64,不要使用AnyCPU配置。 - 本地依赖组件校验
非托管Oracle.DataAccess无法仅通过拷贝dll到项目目录运行,必须依赖本地安装的Oracle客户端或ODAC核心组件,缺少对应文件就会触发文件找不到异常。
解决方法:下载安装和Oracle 12c版本、位数匹配的ODAC安装包,安装时勾选配置到全局程序集缓存选项。 - 推荐替代方案(规避所有驱动依赖问题)
直接替换为全托管ODP.NET驱动,无需依赖任何本地Oracle组件:- 打开项目的NuGet包管理器,搜索安装
Oracle.ManagedDataAccess包 - 将代码开头的导入语句从
Imports Oracle.DataAccess.Client替换为Imports Oracle.ManagedDataAccess.Client即可,原有连接逻辑完全不需要修改,兼容性更强,不会出现驱动加载类错误。
- 打开项目的NuGet包管理器,搜索安装
- 非托管驱动引用配置优化
如果坚持使用原有非托管驱动,选中项目引用列表中的Oracle.DataAccess,右键打开属性页,将「复制本地」属性设置为False,避免本地复制的dll和全局程序集的版本冲突。
内容的提问来源于stack exchange,提问作者Ladu Sing
相关产品推荐
相关产品推荐

