【发布时间】:2016-12-16 14:42:26
【问题描述】:
这是我的代码
string queryString = "";
if (table == "") queryString = "select table_name from all_tables";
else queryString = "SELECT column_name FROM all_tab_columns " +
"WHERE table_name = '"+table+"'";
using (OracleConnection connection = new OracleConnection(conexionbase))
{
try
{
{
connection.Open();
if (connection != null && connection.State != ConnectionState.Closed)
{
var nuevadataAdapter = new OracleDataAdapter(queryString, connection);
var nuevadataSet = new DataSet();
nuevadataAdapter.Fill(nuevadataSet);
for (int i = 0; i < nuevadataSet.Tables[0].Rows.Count; i++)
{
DropDownList2.Items.Add(nuevadataSet.Tables[0].Rows[i][0].ToString());
}
connection.Close();
}
else
else DropDownList2.Items.Add("Cant Make a Connection.");
}
}
catch (Exception ex)
{
else DropDownList2.Items.Add(ex.Message);
}
}
列和表的代码相同。 当“列”值为空时,它只显示数据库中的所有表名,并且做得恰到好处。 但是当“column”值有一个列名,并且它建立连接时,它会显示一条消息“OracleConnection.ConnectionString 无效”。
我不知道为什么会这样,我可以建立连接并显示所有 table_names,但无法获取列名。 我只使用 ODAC 无法访问数据库本身,我也尝试使用“DESCRIBE name_of_table”,但没有成功。
获取表中所有列名的正确方法是什么?可能是我无法访问所有列吗?它是一个外部数据库。
【问题讨论】:
-
您可能无法访问表中的所有列名。例如,目录(系统)表有许多视图和同义词,具有不同权限的用户只能看到选定的列。从
dba_tab_columns读取目录表(或视图)的列名可能会比从all_tab_columns读取更多的列。 -
您是否能够直接访问数据库(使用 SQL Developer、Toad、SQL*Plus 等前端)?您是否能够直接执行查询,以确认您得到正确的答案? (或者,您可以请有权访问数据库的人为您运行它吗?)该查询对我来说很好。
-
我没有这些,只有正在开发的平台和连接字符串。
-
你能否编写一个不同的、更简单的代码 sn-p 来尝试从一个表的 all_tab_columns 中检索列名?这行得通吗?
-
它没有用,我也尝试了很多列,但没有用。