无法从Oracle数据库检索表列表-conn.GetSchema(“ Tables”)

时间:2019-04-19 11:21:49

标签: c# oracle ado.net odbc

我需要检索由使用Oracle ODBC驱动程序的DSN定义的Oracle数据库中的表的列表。

但是,OdbcConnection.GetSchema("Tables")会在大约30秒后引发异常ERROR [HYT00] [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation\nORA-00604: error occurred at recursive SQL level 1

using (OdbcConnection connection = new OdbcConnection("Driver={Oracle in OraDB18Home1};Dbq=XE;Uid=system;Pwd=mypassword;"))
{ 
            connection.Open();
            //Also unsuccessful with "Views" and "Columns", but works with "DataTypes" and "Restrictions"
            DataTable schema = connection.GetSchema("Tables");
}

数据库是新安装的,并且不是太大。

我可以不带参数调用GetSchema(),以成功检索所有受支持的模式集合。

我还可以对我的数据库成功运行查询:

OdbcCommand command = new OdbcCommand("SELECT * FROM vendors")
{
           Connection = connection
};
OdbcDataReader reader = command.ExecuteReader();

1 个答案:

答案 0 :(得分:0)

您应该停止使用ODBC。使用ODP.NET-这是金标准的Oracle .NET提供程序。并使用“托管”版本,即Oracle.ManangedDataAccess。下面的代码可以正常工作

var conn = new OracleConnection("Data Source=server:1521/sid;password=pwd;user id=usr");
conn.Open();
var tbl = conn.GetSchema();
conn.Close();
Consile.WriteLine(tbl.Rows.Count.ToString());