繁体   English   中英

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

[英]c# How can I filter the column names of a database table?

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

我该如何解决这个问题?

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

因此它应该是这样的:

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

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

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

参考:

DataTable.Select方法(MSDN)

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

例如 -

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}';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM