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

32位C# .Net程序连接Oracle数据库超时问题求助

Oracle连接超时问题排查与解决

基础网络连通性验证

  • 执行 ping 数据库真实IP 确认主机可达,不通则联系网络组排查防火墙、路由配置
  • 执行 telnet 数据库真实IP 1521 测试端口开放状态,连不上则检查数据库服务器防火墙规则、监听服务是否运行

Oracle监听服务检查

  • 登录数据库服务器,运行 lsnrctl status 命令:
    • 确认监听在1521端口正常运行
    • 核对输出中的SERVICE_NAME与你连接字符串里的1234完全一致
  • 若监听未启动,执行 lsnrctl start 启动服务

连接字符串优化

托管驱动适配说明

你使用的Oracle.ManagedDataAccess.Client本身不依赖本地Oracle客户端,但要兼容公司32位客户端配置的话:

  • 若想用本地tnsnames.ora中的1234条目,需指定配置文件路径:
    // 在初始化连接前设置环境变量,替换为你实际的admin目录路径
    Environment.SetEnvironmentVariable("TNS_ADMIN", @"C:\Program Files (x86)\Oracle\Oracle Client 19c\network\admin");
    
  • 直接使用完整连接字符串时,修正占位符并添加超时参数:
    private string connectionString = "User Id=你的用户名;Password=你的密码;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=数据库真实IP)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=1234)));Connection Timeout=30;";
    

项目编译配置调整

  • 将C#项目的平台目标设置为x86:右键项目→属性→生成→平台目标,选择x86,避免64位运行环境与32位客户端不兼容

本地客户端连接测试

  • 用32位sqlplus工具验证连接,排除代码外的问题:
    sqlplus 用户名/密码@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=数据库真实IP)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=1234)))
    
    • 若sqlplus连接失败,问题出在客户端或服务器配置;若成功,再聚焦代码调试

代码优化建议

  • 使用using语句自动管理连接生命周期,同时输出完整异常栈便于排查:
    private void ConnectOracle()
    {
        try
        {
            using (OracleConnection conn = new OracleConnection(connectionString))
            {
                conn.Open();
                Console.WriteLine("连接成功");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"错误信息:{ex.Message}");
            Console.WriteLine($"详细追踪:{ex.ToString()}");
        }
    }
    

内容的提问来源于stack exchange,提问作者Tomasz Myszak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:25:25