Pomelo.entityframeworkcore.mysql: How to use DELIMITER in raw sql statements

Created on 4 Sep 2019  ·  3Comments  ·  Source: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

I want create a trigger use raw sql,this sql as:

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 ;

Executed in mariadb is no problem, but the raw sql query using EF core will report a DELIMITER error, as follows

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

use DELIMITER $$; as same error

So,how to Execut raw sql with DELIMITER,or what alternatives?

Please,thanks!

closed-question type-question

All 3 comments

DELIMITER $$ is for MySQL Workbench. In C# code, just create a MySqlCommand with the full command text and execute it:

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 $$ is for MySQL Workbench. In C# code, just create a MySqlCommand with the full command text and execute it:

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();
}

Thank you, this's very useful for me。非常感谢!

Was this page helpful?
0 / 5 - 0 ratings