source

쿼리는 GUI를 통해 정상적으로 작동하지만 Dapper를 통해 실행하려고 하면 일반 오류를 반환합니다.

factcode 2023. 10. 16. 22:07
반응형

쿼리는 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

반응형