我们有一个Oracle 8i数据库,我只有读取权限。我们使用ODBC和MS Access从该数据库读取数据,因为我们没有Oracle客户端软件。这很好用。 我在ASP.NET中使用ADO.NET。现在我想显示我通过ODBC在MS Access中看到的所有表的列表。 我在C#中尝试使用ODBC连接。我尝试了以下查询来获取表的列表,这些表不起作用。
这是我用来实现这个功能的功能,它实际上并不像我希望的那样。
public static ArrayList GetODBCTablesList()
{
try
{
OdbcConnection DbConnection = new OdbcConnection("DSN=mydsn;UID=user1;PWD=pwd1;");
DbConnection.Open();
OdbcCommand DbCommand = DbConnection.CreateCommand();
DbCommand.CommandText = "select table_name from all_tables";
OdbcDataReader DbReader = DbCommand.ExecuteReader();
if (DbReader != null)
{
ArrayList TableList = new ArrayList();
while (DbReader.Read())
{
TableList.Add(DbReader.GetString(0));
}
DbReader.Close();
DbCommand.Dispose();
DbConnection.Close();
TableList.Sort();
TableList.TrimToSize();
return TableList;
}
DbCommand.Dispose();
DbConnection.Close();
return null;
}
catch (Exception ex)
{
LogHandler.WriteLogMessage(ex.GetBaseException().ToString(), true);
return null;
}
}
这给了我一个表的列表,这些表不包含我在使用ODBC链接MS Access中的表时看到的所有表。
答案 0 :(得分:3)
这有效:
select table_name from tabs;
答案 1 :(得分:2)
你可以试试
select table_name from user_tables
或
select object_name from USER_objects where object_type='TABLE'
答案 2 :(得分:2)
由于您使用的是ADO.NET,我建议您使用OdbcConnection.GetSchema。此方法返回DataTable
,其中包含有关数据库架构的信息。
从this answer开始,这可能适合您:
OdbcConnection.GetSchema("表&#34)
答案 3 :(得分:1)