Pomelo.entityframeworkcore.mysql: Как использовать DELIMITER в необработанных операторах sql

Созданный на 4 сент. 2019  ·  3Комментарии  ·  Источник: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Я хочу создать триггер, использующий необработанный 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 не проблема, но необработанный запрос sql с использованием ядра EF сообщит об ошибке 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 $$; как ту же ошибку

Итак, как выполнить необработанный sql с помощью DELIMITER , или какие альтернативы?

Пожалуйста спасибо!

closed-question type-question

Все 3 Комментарий

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

Спасибо, это мне очень пригодилось。 非常 感谢!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

cetubig picture cetubig  ·  3Комментарии

hainguyenthanh picture hainguyenthanh  ·  3Комментарии

matthewjcooper picture matthewjcooper  ·  4Комментарии

mason-chase picture mason-chase  ·  4Комментарии

IonRobu picture IonRobu  ·  3Комментарии