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

Oracle.ManagedDataAccess查询在C#中失效但SQL Developer可正常运行

解决Oracle.ManagedDataAccess中“表或视图不存在”的问题

可能的原因及解决方案

1. 对象名称大小写不匹配

Oracle对带双引号的对象名称会严格区分大小写,不带双引号的名称则会自动转换为大写存储。

  • 若你在SQL Developer中执行的是SELECT * FROM "SCHEMA"."TABLE"(大写带引号),但C#代码里写的是SELECT * FROM ""schema"".""table""(小写带引号),Oracle会判定为不同对象,导致找不到。
  • 解决方式:
    • 若对象为默认创建(未用双引号),直接使用不带引号的大写名称:SELECT * FROM SCHEMA.TABLE
    • 若对象是用双引号创建的特定大小写,严格匹配大小写并保留双引号:SELECT * FROM "schema"."table"(需和创建时的大小写完全一致)

2. CURRENT_SCHEMA设置未正确生效

执行ALTER SESSION SET CURRENT_SCHEMA = schema后,必须在同一个会话连接中执行后续查询,且schema名称需匹配实际存储的大小写:

using (OracleConnection connection = new(_connectionString))
{
    await connection.OpenAsync(cancellationToken);
    
    // 先设置当前schema,注意名称大小写(默认创建的schema为大写)
    using (var setSchemaCmd = new OracleCommand("ALTER SESSION SET CURRENT_SCHEMA = SCHEMA", connection))
    {
        setSchemaCmd.ExecuteNonQuery();
    }
    
    // 无需指定schema,直接查询表(同样注意表名大小写)
    var sql = @"SELECT * FROM TABLE";
    using (var cmd = new OracleCommand(sql, connection))
    {
        cmd.ExecuteNonQuery();
    }
}

3. 验证权限与对象存在性

在C#中执行以下查询,确认目标对象是否对当前用户可见:

SELECT OWNER, TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'SCHEMA' AND TABLE_NAME = 'TABLE'
  • 若查询无结果:说明当前用户other_user没有该对象的访问权限,或对象名称/所有者拼写错误
  • 若有结果:回到第一步检查查询语句的大小写问题

4. 确认连接字符串正确性

确保连接字符串中的User Id确实是拥有跨Schema查询权限的other_user,且Data Source指向正确的数据库实例,避免连接到错误环境。


内容的提问来源于stack exchange,提问作者Lóri Nóda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:50:07