【问题标题】:c# How can I filter the column names of a database table?c#如何过滤数据库表的列名?
【发布时间】:2017-09-16 11:45:27
【问题描述】:

我使用INFORMATION_SCHEMA 来获取我的数据库的所有表和列。

DataTable dt_search_BaseTables = new DataTable();
MySqlDataAdapter mAdapter;
MySqlCommand myCommand = new MySqlCommand(@"SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, 
                                            COLUMN_DEFAULT, COLUMN_TYPE, COLUMN_KEY FROM 
                                            INFORMATION_SCHEMA.COLUMNS", connection);
mAdapter = new MySqlDataAdapter(myCommand);
mAdapter.Fill(dt_search_BaseTables);

但如果我想选择一个特定的 table_name 来仅获取一个不起作用的表的列:

DataRow[] dr = dt_search_BaseTables.Select("TABLE_NAME=" + stablename);

我明白了

错误:找不到列 [stablename]。

我该如何解决这个问题?

【问题讨论】:

    标签: c# mysql information-schema


    【解决方案1】:

    问题很简单:您需要在stablename 内的传递的表名周围添加单引号,然后由于Select 方法与RowFilter syntax 具有相同的表达式规则,它将传递的值视为字符串字面量赋值。

    所以应该是这样的:

    DataRow[] dr = dt_search_BaseTables.Select("TABLE_NAME = '" + stablename + "'");
    

    或创建一个字符串变量,然后将其传递给Select 方法:

    string expression = "TABLE_NAME = '" + stablename + "'";
    DataRow[] dr = dt_search_BaseTables.Select(expression);
    

    参考:

    DataTable.Select Method (MSDN)

    【讨论】:

      【解决方案2】:

      我建议您在 SELECT 查询中添加 WHERE 条件。这将有助于在服务器端过滤大量不必要的表 -

      例如-

      SELECT
        TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT, COLUMN_TYPE, COLUMN_KEY
      FROM
        INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多