現象:使用 `MySqlCommandBuilder` 自動生成 `UpdateCommand`,呼叫 `adapter.Update(dataTable)` 時報錯或無效果。
// 1. 定義 UpdateCommand
string sql = @"UPDATE hardware_parameter
SET param_value = @val, update_time = NOW()
WHERE id = @id";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.Add("@val", MySqlDbType.VarChar, 255, "param_value");
cmd.Parameters.Add("@id", MySqlDbType.Int32, 0, "id"); // SourceColumn 對應 DataTable 欄位
cmd.UpdatedRowSource = UpdateRowSource.None;
adapter.UpdateCommand = cmd;
// 2. 呼叫 Update
adapter.Update(dataTable); // 逐行執行參數化 SQL,安全高效
adapter.InsertCommand = new MySqlCommand(
"INSERT INTO hardware_parameter (param_name, param_value) VALUES (@name, @val)", conn);
adapter.InsertCommand.Parameters.Add("@name", MySqlDbType.VarChar, 100, "param_name");
adapter.InsertCommand.Parameters.Add("@val", MySqlDbType.VarChar, 255, "param_value");
adapter.DeleteCommand = new MySqlCommand(
"DELETE FROM hardware_parameter WHERE id = @id", conn);
adapter.DeleteCommand.Parameters.Add("@id", MySqlDbType.Int32, 0, "id");
拋棄 `CommandBuilder`,擁抱顯式參數化 Command,是 ADO.NET/MySqlConnector 開發的專業標誌。