这是我的代码
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”值为空时,它只显示数据库中的所有表名,并且恰到好处。 但是当“column”值具有列名并且它进行连接时,它会显示消息“OracleConnection.ConnectionString is invalid”。
为什么它这样做我不知道,我可以建立连接并显示所有table_names,但不能得到列名。 我使用ODAC只是没有访问数据库本身,我也尝试使用“DESCRIBE name_of_table”,它没有用。
在表格中列出所有列名称的正确方法是什么?难道我不能访问所有列?它是一个外部数据库。
答案 0 :(得分:0)
尝试执行类似此查询的操作:
string queryString = @"select tb.table_name
from all_tables tb
left join all_tab_columns tc
on tb.table_name = tc.TABLE_NAME
where
tc.COLUMN_NAME like '%"+ column + "%'";
答案 1 :(得分:0)
以下是将结果输入单个SELECT
语句的方法(仅在我的Oracle数据库上进行测试,包括空字符串,与Oracle中的NULL相同,并具有实际的表名)。当我传入一个与我的数据库中任何表的名称不匹配的非空字符串时,我得到一个空的结果集。查询仍然可以正常运行,它只返回零行。
:var_table是一个绑定变量;这是您在C#
代码中插入变量的地方。
在所有情况下,union all
的一个分支将被执行(另一个将被运行时几乎立即丢弃)。
select table_name from all_tables
where :var_table is null
union all
select column_name from all_tab_columns
where table_name = :var_table;
答案 2 :(得分:0)
public string get(string tblname)
{
string queryString = "";
if (tblname == "") queryString = "select TABLE_NAME from INFORMATION_SCHEMA.TABLES";
else queryString = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS " +
"WHERE table_name = '" + tblname + "'";
return queryString;
}