You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5 WinForm项目使用Oracle.DataAccess.dll连接远程Oracle数据库时System.EnterpriseServices程序集加载失败

解决.NET 5 WinForm连接Oracle时的System.EnterpriseServices加载错误

你现在的情况是用VS2019在Windows10 64位上开发.NET5的WinForm应用,要连远程Oracle库,已经装了Oracle Client和SQL Dev(能正常连接),但引用了传统的Oracle.DataAccess.dll后跑起来就报错找不到System.EnterpriseServices对吧?

问题根源

你选的Oracle.DataAccess.dll是专门给.NET Framework设计的传统ODP.NET组件,而.NET5属于.NET Core生态,这俩压根不兼容。System.EnterpriseServices是.NET Framework独有的程序集,.NET5里默认没有,所以才会报找不到的错误。

具体解决步骤

  • 先删掉错误的引用:在VS项目里把那个C:\App\db_home\ODP.NET\bin\4\Oracle.DataAccess.dll的引用删掉,别再用它了。
  • 装对的组件:打开项目的NuGet包管理器(右键项目→管理NuGet程序包),搜索并安装Oracle.ManagedDataAccess.Core——这是Oracle官方给.NET Core/.NET 5+准备的纯托管组件,不需要依赖本地Oracle Client,用起来更省心。要是你用EF Core操作数据库,也可以装Oracle.EntityFrameworkCore。
  • 调整代码的命名空间:把代码里的OracleConnection、OracleCommand这些类的命名空间从Oracle.DataAccess.Client改成Oracle.ManagedDataAccess.Client,记得在代码开头加Imports Oracle.ManagedDataAccess.Client。
  • 优化连接代码:你的连接字符串格式没问题,不过也可以简化成User Id=*USER_ID*;Password=*User_PWD*;Data Source=//*Host_URL*:*DB_Port*/*SERVICE_NAME*;。另外给你调整了下代码逻辑,原来的Exit Try没必要,而且成功时应该返回连接对象:
    Imports Oracle.ManagedDataAccess.Client
    
    Public Function OpenOracleBddConnexion() As OracleConnection
        Dim strOracleConnection As String = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=*Host_URL*)(PORT=*DB_Port*))) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=*SERVICE_NAME*))); User Id=*USER_ID*;Password=*User_PWD*;"
        Dim strMsgException As String = "Problème de connexion aux bases Oracles. " & strMsgErrorTellYourAdmin & vbCrLf & "-- Message d'erreur: "
        Dim conn As New OracleConnection(strOracleConnection)
    
        Try
            conn.Open()
            Return conn
        Catch ex As Exception
            MsgBox(strMsgException & ex.Message, MsgBoxStyle.Critical, "Erreur Connexion Bases Oracle")
            Return Nothing
        End Try
    End Function
    

额外提示

如果因为特殊需求必须用本地Oracle Client,那得装ODP.NET Core的非托管版本,还要确保Oracle Client是64位(和你的项目平台一致),并且把C:\App\db_home\bin加到系统PATH环境变量里。但还是推荐用托管版本,不用折腾本地客户端的配置。

内容的提问来源于stack exchange,提问作者8oris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:52:28