首页 > 解决方案 > 无法从 Oracle 数据库中检索表列表 - conn.GetSchema("Tables")

问题描述

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

但是,大约 30 秒后或OdbcConnection.GetSchema("Tables")引发异常。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();

标签: c#oracleado.netodbc

解决方案


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

推荐阅读