[英]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);
参考:
我建议您将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.