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

Windows下VB.Net连接Oracle 21c XE失败问题求助

问题

在Windows 11机器上安装了Oracle Database 21c Express Edition,已通过SQL Plus创建表空间和具备DBA权限的用户,同时配置了tnsnames.ora。相关SQL命令如下:

/* Creating Tablespace*/
create tablespace ts_Trading DATAFILE 'D:\Database\OracleTest\ORATest.dbf'
size 10m
autoextend on maxsize 1024m	extent management local uniform size 64k

/* Creating User */
create user ####### identified by #######
default tablespace ts_Trading
temporary tablespace temp
quota unlimited on ts_Trading
quota 0 on system
/
grant DBA to #######

已通过SQL Plus使用#######/*****@XE格式成功测试新用户连接,tnsping工具也验证了Oracle客户端连通性。但使用.Net 6框架搭配OracleManagedDataAccess.Core的VB.Net窗体应用连接失败,代码如下:

Imports System.Data.OracleClient
Imports Oracle.ManagedDataAccess.Client
Imports Oracle.ManagedDataAccess.Types

Public Class frmOracle
    Private Sub frmOracle_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim oradb As String = "Data Source=XE;User Id=#######;Password=*****;"
        Dim conn As New OracleConnection(oradb)
        conn.Open()
    End Sub
End Class

报错信息:

Oracle.ManagedDataAccess.Client.OracleException: 'ORA-12154: Cannot connect to database. Cannot find alias XE in DataSources, , EZConnect'

解决办法
  • 直接使用EZConnect格式连接字符串
    绕过tnsnames.ora的依赖,改用EZConnect格式编写连接字符串,两种写法可选:

    ' 完整DESCRIPTION格式
    Dim oradb As String = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));User Id=#######;Password=*****;"
    

    或者更简洁的短格式:

    Dim oradb As String = "Data Source=localhost:1521/XE;User Id=#######;Password=*****;"
    
  • 让OracleManagedDataAccessCore读取到正确的tnsnames.ora
    OracleManagedDataAccessCore读取配置文件的逻辑和传统Oracle客户端不同,可通过两种方式指定tnsnames.ora路径:

    1. 在项目的appsettings.json(或app.config)中添加配置节点,替换为你实际的tnsnames.ora所在目录:
      {
        "OracleConfiguration": {
          "TnsAdmin": "D:\\Oracle\\product\\21c\\homes\\OraDB21Home1\\network\\admin"
        }
      }
      
    2. 设置系统环境变量TNS_ADMIN,指向tnsnames.ora所在目录,重启Visual Studio后再运行项目。
  • 检查OracleManagedDataAccess.Core版本兼容性
    确保安装的NuGet包版本与Oracle 21c兼容,建议升级到最新稳定版,避免版本不匹配导致的连接问题。

  • 移除冲突的命名空间引用
    代码中引用的System.Data.OracleClient是微软已弃用的Oracle客户端组件,与Oracle官方的Oracle.ManagedDataAccess.Client可能存在冲突,直接删除该引用即可。


内容的提问来源于stack exchange,提问作者Abu Ben Reaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:57:11