[C#] 取MySQL 中資料表(TABLE)的欄位以及相關資訊
2013-07-03
上一篇文章,我們談到關於透過C#取MySQL 其中一資料庫中的所有TABLE
這篇我們來談談取到資料庫的TABLE後我們來取得各TABLE裡面個欄位名稱、是否為KEY、欄位類別、欄位類別最大限制
首先我們在MySQL 建立兩張資料表並且欄位如下:
test_ina9 > friends
test_ina9 > payrecord
再來我們承續上篇文章我們來看介面
首先填完資料庫的資料之後,載入所有的TABLE 名稱,之後根據選取的資料表,將資料表底下的欄位名稱、KEY型態、是否可以NULL、資料型態、資料型態最大限制給載入
接下來我們來看看如何得到這些資料
一樣我們回到 INFORMATION_SCHEMA 這資料庫中,其中有一個COLUMNS 的資料表
我們透過這SQL 指令可以得到
SELECT * FROM `COLUMNS` WHERE TABLE_SCHEMA ='test_ina9'
有沒有發現其資料庫中,跨越資料表,所以有的欄位資訊都會被記錄在這邊
這時候,我們只需要將一些比較重要的資訊拿出來就可以了..
假設 資料庫名稱為 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
這時候來解釋一下個欄位的定義
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:
payrecord:
如果有交代不清楚的地方,就直接看Code 囉 :)
Source: