可以获取table_name但不能获取column_name

时间:2016-12-15 16:15:18

标签: c# asp.net oracle

这是我的代码

 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”,它没有用。

在表格中列出所有列名称的正确方法是什么?难道我不能访问所有列?它是一个外部数据库。

3 个答案:

答案 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;
        }