[C#] 取MySQL 中資料表(TABLE)的欄位以及相關資訊

2013-07-03

上一篇文章,我們談到關於透過C#取MySQL 其中一資料庫中的所有TABLE
這篇我們來談談取到資料庫的TABLE後我們來取得各TABLE裡面個欄位名稱、是否為KEY、欄位類別、欄位類別最大限制
首先我們在MySQL 建立兩張資料表並且欄位如下:
test_ina9 > friends
2013-07-03_184305
test_ina9 > payrecord
2013-07-03_184317
再來我們承續上篇文章我們來看介面
2013-07-03_184655
首先填完資料庫的資料之後,載入所有的TABLE 名稱,之後根據選取的資料表,將資料表底下的欄位名稱、KEY型態、是否可以NULL、資料型態、資料型態最大限制給載入
接下來我們來看看如何得到這些資料
一樣我們回到 INFORMATION_SCHEMA 這資料庫中,其中有一個COLUMNS 的資料表
我們透過這SQL 指令可以得到

SELECT * FROM `COLUMNS` WHERE TABLE_SCHEMA ='test_ina9'

2013-07-03_185455


有沒有發現其資料庫中,跨越資料表,所以有的欄位資訊都會被記錄在這邊
這時候,我們只需要將一些比較重要的資訊拿出來就可以了..

假設 資料庫名稱為 test_ina9 資料表名稱為 friends 其SQL 語法:




SELECT COLUMN_KEY, COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH

FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME =  'friends'

LIMIT 0 , 30

2013-07-03_185804
這時候來解釋一下個欄位的定義
COLUMN_KEY = 該欄位的KEY 型態
COLUMN_NAME =欄位名稱
IS_NULLABLE = 是否允許NULL,其中Id 欄位為 PRI 自然就不允許NULL
DATA_TYPE = 資料型態
CHARACTER_MAXIMUN_LENGTH = 該欄位資的最大上限 像我設定為varchar 的資料型態 就可以限制最大為50字

這些都準備好了 所以我們來時做在 C# 中取得這些資料





//真的有選到Table在進行動作
 
if (chkBoxAllTables.SelectedItem != null)
{
 
    var tableName = chkBoxAllTables.SelectedItem.ToString();
    var conn = new MySql.Data.MySqlClient.MySqlConnection
        {
            ConnectionString =
                "server=" + txtHost.Text + ";uid=" + txtId.Text + ";pwd=" + txtPassword.Text +
                ";database=" + txtDBName.Text
        };
 
    try
    {
        conn.Open();
        string commandStr =
            "select COLUMN_KEY,COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH  from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '" + tableName + "'";
        var sqlAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter
            {
                SelectCommand = new MySql.Data.MySqlClient.MySqlCommand(commandStr, conn)
            };
        var ds = new DataSet();
        sqlAdapter.Fill(ds, tableName);
        gridColumns.DataSource = ds.Tables[0];
        conn.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(@"讀取資料失敗 原因為 " + ex.Message, @"錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    finally
    {
    }
}
else
{
    MessageBox.Show(@"Choose a table :)", @"info");
}


結果:

friends:
2013-07-03_191005

payrecord:
2013-07-03_190951

如果有交代不清楚的地方,就直接看Code 囉 :)
Source:


當麻許的超技八 2014 | Donma Hsu Design.