[C#] 取MySQL 其中一資料庫中的所有TABLE

2013-07-03

之前有需求必須操控MySQL,所以順便筆記一下給之後有碰到的人
首先要在.net 下面要用 ADO.net 去操控 MySQL 必須得先下載一個Library ..
不過幸好,現在已經是21世紀,你可以到 NUGET 去下載安裝.
2013-07-03_121318
安裝完後,就會看到References 多了 MySql.Data
2013-07-03_121948
再來交代下測試的畫面
2013-07-03_152755
簡單的說 輸入一些必須要的資料 包含 主機位置(HOST) , 帳號(ID) , 密碼(PASSWORD) , 資料庫名稱(DBNAME)
之後就按下測試連結,就先測試是否可以連得上資料庫.
C#:

private void btnTestConnection_Click(object sender, EventArgs e)
{
 
    //建立MySql Connection 
    var conn = new MySql.Data.MySqlClient.MySqlConnection
        {
            ConnectionString = "server=" + txtHost.Text + ";uid=" + txtId.Text + ";pwd=" + txtPassword.Text +
                               ";database=" + txtDBName.Text
        };
    conn.Open();
    MessageBox.Show(conn.State == ConnectionState.Open ? "Success" : "Error");
    //記得關閉
    conn.Close();
}

結果:

2013-07-03_153713

再來,因為我們得找出 在test_ina9 這Database 中所有Table 的名稱.

首先我們在test_ina9 這資料庫中建立兩張資料表

2013-07-03_144513

一個是 friends 一個是payrecord ,至於我們要如何透過程式來知道呢?!

其實打開管理系統就會看到 其實有一個叫做 information_schema 的資料庫,其中紀載了非常多關於MySQL運作的資訊

2013-07-03_144932

其中有一張叫做 TABLES 的資料表,我們對他下SQL 語法

2013-07-03_144923

所以其TABLES 這資料表中 TABLE_SCHEMA 的欄位等於 欲查詢資料庫名稱(test_ina9)時就可以拿到期下面擁有的TABLE_NAME

這樣就好辦多了..我們看如何透過C#去撈取.

C#:

private void btnLoadAllTables_Click(object sender, EventArgs e)
{
    var conn = new MySql.Data.MySqlClient.MySqlConnection
    {
        ConnectionString = "server=" + txtHost.Text + ";uid=" + txtId.Text + ";pwd=" + txtPassword.Text +
                           ";database=" + txtDBName.Text
    };
    //開啟連結
    conn.Open();
    //如果成功開啟的話
    if (conn.State == ConnectionState.Open)
    {
        chkBoxAllTables.Items.Clear();
        try
        {
            var commandStr = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='" + txtDBName.Text +
                             "'";
            var sqlCommand = new MySql.Data.MySqlClient.MySqlCommand(commandStr, conn);
            var dr = sqlCommand.ExecuteReader();
            while (dr.Read())
            {
                chkBoxAllTables.Items.Add(dr["TABLE_NAME"], true);
            }
        }
 
        catch (Exception ex)
        {
            MessageBox.Show("讀取資料失敗 原因為 " + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    else
    {
        MessageBox.Show("開啟失敗,請確定您輸入的資料庫資訊", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
 
    //記得關閉
    conn.Close();
}

結果:

2013-07-03_154728

就先聊到這裡,有需要的人可以直接下載Sample.


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