Dapper.Net에서 작동하지 않는 매개 변수

.net c# dapper mysql

문제

내가 링크에서 SqlMapper.cs 파일을 다운로드 한 여기를 .

조금 혼란 스럽지만. 매개 변수를 사용할 때마다 동일한 쿼리 데이터를 사용하고 있음에도 불구하고 내 쿼리에서 빈 컬렉션을 반환합니다.

다음은 데이터를 추출하는 데 사용되는 코드 스 니펫입니다.

using (PhoenixConnection connection = new PhoenixConnection(Open: true))
{
    //this example works, returns 1 token object
    string queryWorks = @"Select AccountName, AccountToken from btsource.accounts
    where AccountName = 'RekindledPhoenix'";

    // replaces 'RekindledPhoenix' with a parameter, returns empty collection
    string queryDoesnt = @"Select AccountName, AccountToken from btsource.accounts 
    where AccountName = @AccountName";

    var tokenList = connection.Query<TokenRequest>(queryWorks);
    var tokenList = connection.Query<TokenRequest>(queryDoesnt, new { AccountName = "RekindledPhoenix" });
    return tokenList.FirstOrDefault();
}

여기 내 수업은 내가 사용하고있다.

public class TokenRequest
{
    public string AccountName { get; set; } //`AccountName` VARCHAR(50) NOT NULL
    public long AccountToken { get; set; } //`AccountToken` BIGINT(20) NOT NULL
}

다음은 PhoenixConnection 객체의 래퍼 함수입니다.

public IEnumerable<T> Query<T>(string Query, dynamic Parameters = null)
{
    return _connection.Query<T>(Query, (object)Parameters);
}

난 노력 했어:

  • mysql 테이블 이름과 값을 다시 확인
  • 동적 인 것을 사용하는 래퍼 변경 (작동하지 않음)
  • 연결 확인 중 입니다.
  • 원시 mysqlConnection 객체, commandtext 등

나는 무엇을 놓칠 수 있 었는가?

매개 변수에 사용되는 특수 설정이 있습니까?

편집하다:

원시 MySqlConnection 매개 변수를 사용하면 더 잘 작동 ? Dapper에서는 여전히 작동하지 않지만 @ 는 아닙니다.

Dapper에는 정규식 ( [@:] ) 문으로 매개 변수를 추출하는 특정 줄이 있지만 물음표는 무시되는 것으로 나타났습니다. 예상되는 결과를 얻기 위해 무엇을 바꾸어야합니까?

수락 된 답변

나는 그 문제를 발견했다. 원시 MySqlConnection 개체를 사용하여 쿼리를 실행 한 후에는 왜 내 기호에서 @ 기호가 작동하지 않는지에 대한 검색으로 이어졌습니다. 과거에는 항상 사용 ? , 그래서이 행동은 나에게 이상했다.

SqlMapper.cs 변경

다음 @ 기호를 ? (대략적인 줄 번호와 함께) :

1863 줄 : if (identity.sql.IndexOf(" ? " + prop.Name, StringComparison.InvariantCultureIgnoreCase) < 0

줄 1831 : return parameters.Where(p => Regex.IsMatch(sql, "[ ? :]" + p.Name + "([^a-zA-Z0-9_]+|$)", RegexOptions.IgnoreCase | RegexOptions.Multiline));

내 문제를 해결!



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.