. net ODAC查询不返回结果,但SQL DEVELOPER返回结果

本文关键字:结果 返回 SQL DEVELOPER ODAC net 查询 | 更新日期: 2023-09-27 18:13:34

当我在SQL Developer中对新添加的表或具有新添加数据的旧表执行一个简单的选择查询时,我收到结果。但是,如果我使用。net 4.0下最新的Oracle数据访问客户端在。net/c#中运行完全相同的查询,我将收到零结果。

我已经验证了连接字符串是正确的,并且我连接到相同的DB,并且我已经使用简单的"select * from table"查询进行了测试。使用相同的。net代码查询旧数据…它工作得很好。我只能得出这样的结论:这是某种类型的bug,或者可能是Oracle专家知道这是如何发生的。我知道db是复杂的机器,因此我希望有一些合理的解释来解释这是如何发生的…以及我该如何补救

我是一个Oracle新手,但我是一个经验丰富的程序员和问题解决者。这个真难倒我了。

这是我的第一个问题,所以请温柔…谢谢!

这是我的示例代码,返回错误说"…表不存在……"。但是表确实存在,并且查询在SQL DEV中工作得很好。

        String prod_connstr = "Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 10.0.0.17) (PORT = 2621)) " +
        "(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XXXXX)));User Id=XXXXX;Password=XXXXX";
        String sqlStr = "select * from z_test";
        OracleConnection conn = new OracleConnection(prod_connstr);
        try
        {
            conn.Open();
            OracleCommand cmd = new OracleCommand(sqlStr, conn);
            OracleDataReader dr = cmd.ExecuteReader();
            MessageBox.Show(dr.HasRows.ToString());
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error");
        }
        finally
        {
            conn.Dispose();
        } 

. net ODAC查询不返回结果,但SQL DEVELOPER返回结果

每当我看到"…"Table does not exist…",当您知道它存在时,这意味着您正在连接的用户(在连接字符串中)没有被授予select。现在,如果您正在与SQL开发人员连接,并且您使用相同的模式连接字符串,那么您就把我难住了。

edit: as Oğuz Sezer指出,如果您的数据库没有公共的表同义词,您将需要使用Schema。表(忘了这个)