当我在SQL Developer中针对新添加的表或带有新添加数据的旧表执行简单的选择查询时,我会收到结果。但是,如果我使用.NET 4.0下的最新Oracle数据访问客户端在.NET / C#中运行完全相同的查询,则结果为零。
我已验证连接字符串是否正确,并且我正在连接到同一个数据库,并且我已使用简单的“select * from table”查询进行了测试。使用完全相同的.NET代码查询旧数据...它工作得很好。我只能得出结论,这是某种类型的错误,或者也许某位Oracle专家知道如何发生这种情况。我知道数据库是复杂的机器,因此我希望有一些合理的解释,如何发生这种情况......以及我如何解决它。
我是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();
}
答案 0 :(得分:3)
每当我看到“...表不存在......”你知道它的时候,就意味着你所连接的用户(在连接字符串中)没有授予它的选择权。现在,如果您正在与SQL开发人员连接,并且您使用相同的模式连接字符串,那么我很难过。
编辑:正如OğuzSezer所指出的,如果您的数据库没有表的公共同义词,您将需要使用Schema.table(忘记了)