[C#] 取MySQL 其中一資料庫中的所有TABLE
2013-07-03
之前有需求必須操控MySQL,所以順便筆記一下給之後有碰到的人
首先要在.net 下面要用 ADO.net 去操控 MySQL 必須得先下載一個Library ..
不過幸好,現在已經是21世紀,你可以到 NUGET 去下載安裝.
安裝完後,就會看到References 多了 MySql.Data
再來交代下測試的畫面
簡單的說 輸入一些必須要的資料 包含 主機位置(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();
}
結果:
再來,因為我們得找出 在test_ina9 這Database 中所有Table 的名稱.
首先我們在test_ina9 這資料庫中建立兩張資料表
一個是 friends 一個是payrecord ,至於我們要如何透過程式來知道呢?!
其實打開管理系統就會看到 其實有一個叫做 information_schema 的資料庫,其中紀載了非常多關於MySQL運作的資訊
其中有一張叫做 TABLES 的資料表,我們對他下SQL 語法
所以其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();
}
結果:
就先聊到這裡,有需要的人可以直接下載Sample.