c# - 无法从 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\n
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());
推荐阅读
- python - Python 中的 path = pathlib.Path().absolute() 是什么意思?
- ios - 如何在 Swift 中让 UIImageView 照片在一段时间后消失
- python - 使用python获取文本形式本地存储的html文件
- javascript - 如何向 document.createElement() 添加图标?
- node.js - 在 Mongodb 中的 Moongose 聚合管道中使用 $match 类型的字段:mongoose.Schema.ObjectId
- c# - 我缺少什么将我的 C# 代码连接到 MySQL 数据库
- python - 为什么 ModuleNotFoundError: No module named 'key',在 pip install key 成功后?
- javascript - 根据子组件的更改更新 Redux Store
- inno-setup - Inno Script [Code] 部分中的类型不匹配错误
- javascript - 如何在 JavaScript 中创建对象构造函数;