c#如何过滤数据库表的列名?

时间:2017-04-20 02:53:13

标签: c# mysql information-schema

我已使用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]列。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我建议你在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}';