2017-04-20 41 views
0

我已经使用INFORMATION_SCHEMA来获取我的数据库的所有表和列。c#如何过滤数据库表的列名?

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); 

但如果我要选择一个特定的表名只得到不工作的一个表的列:

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

我得到的

ERROR: The column [stablename] could not be found.

我怎样才能解决这个问题?

回答

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)

0

I” d建议您将WHERE条件添加到SEL ECT查询。这将有助于过滤巨大的一套服务器端不必要的表 -

例如 -

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