【发布时间】:2016-02-11 06:45:12
【问题描述】:
如果我编写一个简单的查询,例如“SELECT * FROM r56.Pets;”在 Toad 中返回结果。如果我使用 Oracle.DataAccess.Client 在我的 c# 应用程序中使用相同的登录名执行相同的查询,我会收到错误“ORA-00942 视图表不存在”
在 toad 中工作的连接是 11g。
using Oracle.DataAccess.Client;
string ConnectionString = "UserId=username;Password=password;Data Source=dbname.domain.com;";
DataTable dt = new DataTable();
using (OracleConnection conn = new OracleConnection())
{
try
{
conn.ConnectionString = DbTools.GetConnectionString("oracle");
conn.Open();
OracleDataAdapter oraAdapt = new OracleDataAdapter(qry, conn);
oraAdapt.Fill(dt);
return dt;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
conn.Close();
return null;
}
base {Oracle.DataAccess.Client.OracleConnection} System.Data.Common.DbConnection {Oracle.DataAccess.Client.OracleConnection}
ConnectionString "User Id=username;Data Source=dbname.domain.com;" string
ConnectionTimeout 15 int
ConnectionType Oracle Oracle.DataAccess.Client.OracleConnectionType
Database "" string
DatabaseDomainName "domain.com" string
DatabaseName "dbname" string
DataSource "dbname.domain.com" string
HostName "host" string
InstanceName "dbname" string
LogicalTransactionId null byte[]
OracleLogicalTransaction null Oracle.DataAccess.Client.OracleLogicalTransaction
ServerVersion "11.2.0.4.0" string
ServiceName "sys$users" string
State Open System.Data.ConnectionState
StatementCacheSize 30 int
【问题讨论】:
-
在调试器中检查
conn.ConnectionString和qry的运行时值。它们与您在 Toad 中使用的匹配吗?当您连接到特定架构时,您可以在查询中省略架构名称。 -
对我来说似乎是一样的。我可以连接一个类似的数据库并很好地查询,只是不在这个模式中。前几天我必须被授予查看 Toad 中表的权限,但 C# 应用程序似乎看不到这些表,即使它使用的是我在 Toad 中使用的相同登录名。是的,查询是一样的。
-
它必须与包含我需要访问的表的架构有关。我在同一个数据库上使用了不同的架构,并且能够成功查询。
-
如果我在查询中使用 shema 名称,它在 c# 应用程序中总是会失败。如果我在没有模式名称的情况下查询我需要“r65”模式的表,则找不到它。太令人沮丧了。