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

为什么使用Visual Studio 2019编写的程序无法读取Oracle 9i数据库

问题根因

你遇到的两类报错均为Oracle驱动版本与Oracle 9i数据库不兼容导致:

  • Oracle 9i属于已停止服务多年的老旧版本,目前官方主流驱动均已取消对它的支持。
  • Oracle.ManagedDataAccess系列驱动最低仅支持Oracle 10gR2及以上版本,连接9i时会因密码校验逻辑不兼容抛出ORA-01017误报,和你本地FIPS配置、ODAC安装状态无关。
  • 你当前引用的Oracle.DataAccess.dll来自12c及以上版本的ODAC,该版本同样移除了9i支持,因此直接抛出不支持提示。

可行解决方案

方案1:使用兼容9i的官方非托管驱动

下载安装ODAC 11gR2(11.2.0.3及以下版本,注意匹配你程序的32/64位架构),引用该版本ODAC自带的Oracle.DataAccess.dll即可正常连接9i,同时需要注意:

  • 项目目标平台不要选择Any CPU,需和安装的ODAC位数保持一致。
  • 连接字符串建议补充Validate Connection=true参数,避免连接池异常。
    标准连接字符串示例:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=数据库IP)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=数据库服务名)));User Id=用户名;Password=密码;Validate Connection=true;

方案2:使用微软内置System.Data.OracleClient(无需额外安装ODAC)

.NET Framework 4.5仍内置支持微软已废弃的System.Data.OracleClient类库,完美兼容Oracle 9i,仅需在项目中添加System.Data.OracleClient的程序集引用,将代码中的OracleConnection替换为System.Data.OracleClient.OracleConnection即可使用,缺点是性能略低于Oracle官方驱动,仅适合简单查询场景。

代码优化建议

你当前的代码存在重复实例化连接、未主动释放资源的问题,建议改为using块自动管理连接生命周期:

// 用官方Oracle驱动的写法
using (OracleConnection oracleConnection = new OracleConnection(connectionString))
{
    try 
    {
        oracleConnection.Open();
        // 执行你的数据库操作逻辑
    }
    catch (Exception ex)
    {
        // 可在此处添加异常日志输出,方便后续排查
    }
}

内容的提问来源于stack exchange,提问作者devjelop anje

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:03