쿼리는 GUI를 통해 정상적으로 작동하지만 Dapper를 통해 실행하려고 하면 일반 오류를 반환합니다.
GUI를 통해 MariaDB 서버에서 정상적으로 실행되는 쿼리가 있지만 Dapper C#을 통해 실행을 시도하는 즉시 오류가 발생합니다.
MySql.Data.MySql Client.MySqlException: 'SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 'DELIMITER $BEGIN NOT ATOMIC' 근처에서 사용할 올바른 구문을 확인하십시오.
IF (@EndDate < NOW()) 그런 다음 @GroupId = 3; '1행에' 설정합니다.
저는 일반 IDbConnection 즉, 일반 IDbConnection을 사용하고 있습니다.
using (IDbConnection con = new MySqlConnection(SQLConfig.UI))
쿼리를 호출하는 방법:
return con.Query<MembershipDynamic.MembershipStatus>(sqlQuery, new{ @MembershipId = membershipId}).Single();
동일한 쿼리는 동일한 membershipId와 완벽하게 잘 작동합니다.
왜 정확히 같은 쿼리가 Dapper를 통해 실행되지 않는지 모르겠습니다.
내 연결 문자열은 하나의 추가 매개 변수만 있는 일반 문자열입니다.
AllowUserVariables=True
쿼리는 다른 것을 잘 실행하기 때문에 문제가 없기 때문에 연결 문자열에 무언가가 빠져 있는 것 같습니다.
저도 설정을 해봤습니다.
public MembershipsRepo()
{
DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.MySqlDialect();
}
문의 내용은 이렇습니다.MySqlConnection을 직접 구현하기 위해 DELLITER 없이 시도했지만 첫 번째 선택에 대해서만 결과가 반환됩니다(??나머지는 무시하고...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;
대퍼 / ADO.단순 쿼리에서는 NET이 잘 작동하지만 고급 쿼리에서는 실패합니다. :/
***** 편집
몇 가지 조사 결과 MySQL은 요청당 1개의 쿼리로 제한되므로 조금 더 고급 쿼리인 :/(변수의 경우 Select(선택)로 설정됨)를 쓰기가 거의 불가능합니다.
유일한 방법은 proc를 만들거나 Microsoft SQL로 돌아가거나 다른 SQL을 사용하는 것입니다.
SQL에서 MySQL로 전환하는 데 거의 6개월을 투자했기 때문에 큰 성공을 거둘 수 있을 것입니다. :/ (아키텍처, 복제 등)
:(((((((((((
좋아요, 우리가 몇 달 동안 일을 잃은 것 같군요.
MySQL은 Microsoft SQL을 대체할 수 있는 것이 아닙니다.
기본적으로 저장된 프로시저는 모든 선택 항목을 반환합니다(및 모든 케이스에 가입/처리하기 등).IT는 많은 선택/가입/가입(ifs)을 해야 합니다.
불행하게도 이것은 100MB의 불필요한 데이터를 반환하고 전체 플랫폼을 파괴하는 결과를 초래하기 때문에 거래 단절자가 됩니다.(현재 마이크로소프트 SQL에서 실행 중)
언급URL : https://stackoverflow.com/questions/55116543/query-works-fine-via-gui-but-returns-generic-error-when-try-to-run-through-dapp
'source' 카테고리의 다른 글
WooCommerce 주문확인 메일에서 결제수단을 제거하는 방법은? (0) | 2023.10.21 |
---|---|
앱 자체 내에서 로케일 변경 (0) | 2023.10.21 |
WordPress 게시물에 미디어 업로드 (0) | 2023.10.16 |
C 같은 언어로 ++i++를 할 수 없는 이유는 무엇입니까? (0) | 2023.10.16 |
장고에서 데이터베이스에서 랜덤 레코드 100개를 선택하려면 어떻게 해야 합니까? (0) | 2023.10.16 |