簡體   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