Не удается получить список таблиц из базы данных Oracle — conn.GetSchema(«Таблицы»)

#c# #oracle #ado.net #odbc

#c# #Oracle #ado.net #odbc

Вопрос:

Мне нужно получить список таблиц в базе данных Oracle, которая определяется DSN, использующим драйвер Oracle ODBC.

Однако OdbcConnection.GetSchema("Tables") выдает исключение ERROR [HYT00] [Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operationn или ORA-00604: error occurred at recursive SQL level 1 примерно через 30 секунд.

 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. проверьте это

Ответ №1:

Вы должны прекратить использовать 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());