У меня есть запрос, который прекрасно работает на сервере MariaDB через GUI, однако, как только я попытаюсь выполнить через Dapper C #, я получу ошибку:
MySql.Data.MySqlClient.MySqlException: «У вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который можно использовать рядом с 'DELIMITER $ BEGIN NOT ATOMIC
IF (@EndDate
Я использую Regulard IDbConnection, т. е.
using (IDbConnection con = new MySqlConnection(SQLConfig.UI))
и для вызова запроса:
return con.Query<MembershipDynamic.MembershipStatus>(sqlQuery, new{ @MembershipId = membershipId}).Single();
Тот же запрос отлично работает стот же идентификатор членства.
Я понятия не имею, почему точно такой же запрос не будет выполняться через Dapper.
Моя строка подключения является обычной с одним дополнительным параметром
AllowUserVariables=True
Поскольку запрос не является проблемой, так как он проходит через все остальное, я предполагаю, что в строке подключения что-то отсутствует ???
Я также пытался установить
public MembershipsRepo()
{
DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.MySqlDialect();
}
Вотзапрос.Я пытался без DELIMITER на прямую реализацию MySqlConnection, но он будет возвращать результат только для первого выбора (???), игнорируя остальные ... SQL является модифицированной процедурой MS SQL.
SET @TypeId = NULL;
SET @StartDate = NULL;
SET @EndDate = NULL;
SET @GroupId = NULL;
SET @Status = NULL;
SELECT @TypeId := TypeId, @StartDate := StartDate, @EndDate := EndDate
FROM Membership_Memberships
WHERE MembershipId = @MembershipId;
DELIMITER $
BEGIN NOT ATOMIC
IF (@EndDate < NOW()) THEN
SET @GroupId = 3;
SET @STATUS = 'Expired';
END IF;
IF (SELECT COUNT(Id) FROM Membership_Trials WHERE MembershipId =
@MembershipId AND Active = 1 ) > 0 THEN
SET @GroupId = 4;
SET @Status = 'Trial';
ELSE
SELECT @GroupId := T.GroupType, @Status := T.Name FROM Membership_Types T
WHERE T.Id = @TypeId;
-- RETURN Select @GroupId, @Status;
END IF;
END $
DELIMITER ;
SELECT @GroupId, @Status;
Dapper /ADO.NET отлично работает с простыми запросами, но не работает с более сложными запросами: /
***** РЕДАКТИРОВАТЬ
После некоторого исследования похоже, что MySQL ограничен 1 запросом назапрос, так что почти невозможно написать даже более сложный запрос: / (с переменными, которые задаются Select).
Единственный способ - создать прокы, которые я не буду, или вернутьсяв Microsoft SQL или в другой SQL ...
Это был бы огромный успех, поскольку я почти 6 месяцев инвестировал в переход от SQL к MySQL: / (архитектура, репликация и т. д.)
: ((((((((((((