2015/01/01

C#.Net DataGridView透過MySqlCommandBuilder更新資料

MySQLAdapter類別內有個方法是Update,必須搭配MySqlCommandBuilder
從MySqlCommandBuilder這個類別內的方法看來,除了新增修改也可以做到刪除的行為,開發者不需要自己去輸入MySQL語法
MySQLAdapter應該是透過BindingSource去取得更新或修改過後的DataSet



執行修改前資料如下:


執行修改後資料如下:


執行新增後資料如下:






在執行時,如果你遇到向下圖這樣的狀況
有可能為以下幾種狀況:

  1. 資料表沒有主鍵
  2. 多張資料表串在一起
  3. MySqlCommandBuilder沒有將橋接指派給它

程式碼如下:
using System;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data;
namespace Sample
{
    public partial class Form1 : Form
    {
        private MySqlConnection _conn;
        private MySqlDataAdapter _adapter;
        private DataSet _set;
        private readonly string CONN_STR = "server={0};uid={1};pwd={2};database={3};charset={4};";

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            _conn = new MySqlConnection(string.Format(CONN_STR, "host", "account", "password", "database", "charset"));
            _conn.Open();
            _adapter = new MySqlDataAdapter("SELECT a,b,c FROM abc;", _conn);
            _set = new DataSet();
            _adapter.Fill(_set);
            dataGridView1.DataSource = _set.Tables[0];
            _conn.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MySqlCommandBuilder _cb = new MySqlCommandBuilder(_adapter);
            _adapter.Update(_set);
        }


    }
}