生のSQLを使用してトリガーを作成したい,このSQLは:
DELIMITER $$
CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer
AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW
BEGIN
UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId;
END$$
DELIMITER ;
mariadb で実行しても問題はありませんが、EF コアを使用した生の SQL クエリは次のように DELIMITER エラーを報告します。
MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER $$ CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer A' at line 1 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER $$ CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer A' at line 1
同じエラーとしてDELIMITER $$;
を使用します
それでは、 DELIMITER
で生の SQL を実行するにはどうすればよいでしょうか。
よろしくお願いします!
DELIMITER $$
は MySQL Workbench 用です。 C# コードでは、完全なコマンド テキストでMySqlCommand
を作成して実行するだけです。
using (var command = new MySqlCommand(@"CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer
AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW
BEGIN
UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId;
END", connection))
{
command.ExecuteNonQuery();
}
DELIMITER $$
は MySQL Workbench 用です。 C# コードでは、完全なコマンド テキストでMySqlCommand
を作成して実行するだけです。using (var command = new MySqlCommand(@"CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW BEGIN UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId; END", connection)) { command.ExecuteNonQuery(); }
ありがとう、これは私にとって非常に便利です。非常感<0xE8><0xB0><0xB0>アザッ!