2017-08-14 62 views
0

早上好。无法通过C#API查询Oracle数据库

我试图连接到我设置的Oracle数据库。之前我细讲,下面的代码:

//string was slightly altered. 
string connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=name)));User Id = system; Password = mypass; ";  
string toReturn = "D.BUG-";  
using (OracleConnection oracleConnection = new OracleConnection(connectionString))  
{  
    oracleConnection.Open();  
    using (OracleCommand oracleCommand = new OracleCommand())  
    {  
     oracleCommand.Connection = oracleConnection;  
     oracleCommand.CommandText = "SELECT lixo FROM lixeira WHERE lixo IS NOT NULL";  
     oracleCommand.CommandType = CommandType.Text;  
     using (OracleDataReader oracleDataReader = oracleCommand.ExecuteReader())  
     {  
      //This point IS reached! 
      while (oracleDataReader.Read())  
       //This point is never reached... 
       toReturn += oracleDataReader.GetString(0);  
     }  
    }  
}  
return toReturn; 

现在,我知道一个事实,即连接的作品,我知道一个事实,即表“lixeira”即可找到;我已通过将该名称更改为另一个名称并获取相应的“我无法找到该表”异常来测试此操作。

'ORA-00942: tabela ou visualização não existe'. (Table or View does not exist) 

问题是此代码无法读取。同样的查询通过SQL Developer工作: SQL Developer screenshot of the same query

所以,我有点不知所措,为什么oracleDataReader.Read()只是从来没有工作。难道我做错了什么?

+2

表存在,但它不存在...奇怪,你检查,你从C#登录(在你的连接字符串)用户拥有所需的权限? –

+0

....是的。而已。你可以发布这个答案,我会接受它。非常感谢你。 – Cloud

+0

你的欢乐,我们在这里互相帮助:) –

回答

1

确保连接字符串中的用户/密码是正确的。

如果表不存在,但存在......它可能不会是当前的用户存在(=该用户没有必要的权限)

0

以前的答案是正确的,我只是增加一个位。 可以更换您的查询如下:

SELECT lixo FROM <table owner>.lixeira WHERE lixo IS NOT NULL 

这会给你错过了什么更合适的错误。 它可能是一个许可(授予选择)问题。

  • ABHI
+0

我亲自证实了这一点。谢谢。当我创建一个新用户并继续测试它时,错误非常明显。 'ORA-01045:用户C## CLOUD缺少CREATE SESSION权限;登录被拒绝“。 – Cloud

+0

并且,在纠正该错误之后,但撤销C## CLOUD的SELECT权限后,报告的错误为: 'ORA-01031:privilégiosinsuficientes'。 (权限不足)。 这是一个更好的调试友好错误。 – Cloud