我已使用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]列。
我该如何解决这个问题?
答案 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);
参考:
答案 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}';