В MySQL комментарий, начинающийся с #
, продолжается до конца строки. (См. https://dev.mysql.com/doc/refman/8.0/en/comments.html.)
Ваш необработанный код SQL не содержит новых строк, поэтому комментарий, начинающийся с # MySql Variables can only store
, включает весь оставшийся текст, и ничего не выполняется .
Я бы переписал эту строку, используя дословную C# строку (не интерполированную):
var sql = @"START TRANSACTION;
SET @RemovalDate := ""{removalDate.ToString("yyyy-MM-dd")}"";
# MySql Variables can only store 1 row and thus the results of this query cannot be saved in a variable.
# SET @observationsToDelete := (SELECT Identification FROM cpp.Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM PropertyValues WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM HoldReasonObservation WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM ObservationDeviation WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM ObservationQRTokens WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM ObservationTarra WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM Alibi WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM PackageTrackingIdentifications WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM QuestionAnswer WHERE ObservationIdentification IN(SELECT Identification FROM Observation WHERE StartedUtc < @RemovalDate);
DELETE FROM Observation WHERE StartedUtc < @RemovalDate;
COMMIT;";
Также было бы лучше удалить вашу переменную SQL (SET @RemovalDate := ""{removalDate.ToString("yyyy-MM-dd")}"";
) и используйте реальные параметры команды:
cmd.Parameters.AddWithValue("@RemovalDate", removalDate);
Это позволит коннектору MySQL правильно отформатировать дату для вас и поможет избежать внедрения SQL.