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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从Oracle数据库中检索表列表 - conn.GetSchema(“Tables”)相关的知识,希望对你有一定的参考价值。

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

但是,OdbcConnection.GetSchema("Tables")在大约30秒后抛出了一个例外ERROR [HYT00] [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation ORA-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();
答案

你应该停止使用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());

以上是关于无法从Oracle数据库中检索表列表 - conn.GetSchema(“Tables”)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 从执行计划中检索具有表名的列名作为表

从 Oracle 存储过程中检索数组列表 - Java

从 3 个一对一关系表 (Oracle) 中检索值

无法从数据库中检索数据,以完成列表视图

无法快速从 json 数据中检索 facebook 好友列表

从Oracle数据库保存和检索后无法显示汉字