Dapper : dbf에서 문자열을 파싱 할 수 없습니다 (열 구문 분석 오류).

c# dapper dbf

문제

dapper를 사용하여 dbf 파일을 쿼리합니다. 내 파일 example.dbf에는 두 개의 열이 있습니다.

  1. 값 - 유형 NUMERIC
  2. 이름 - CHARACTER 유형

나는 ExampleDbf 클래스를 쓴다.

class ExampleDbf
{
    public int Value { get; set; }
    public string Name { get; set; }
}

이제 두 개의 간단한 쿼리를 작성하려고합니다.

var listOne = connection.Query<ExampleDbf>("SELECT value FROM Example");
var listTwo = connection.Query<ExampleDbf>("SELECT name, value FROM Example");

ListOne은 괜찮지 만 listTwo를 실행하면 System.Data.DataException이 발생합니다.

Additional information: Error parsing column 0 (name=System.Byte[] - Object)

표준 DataReader를 사용할 때 나는 이와 비슷한 것을 써야합니다.

example.name = System.Text.Encoding.ASCII.GetString((byte[])reader["name"]).Trim();

물론 나는 다음과 같이 작성할 수있다 :

class ExampleDbf2
{
    public int Value { get; set; }
    public byte[] Name { get; set; }
    public string StringName
    {
        get
        {
            return System.Text.Encoding.ASCII.GetString((byte[])Name ).Trim();
        }
    }
}

이제는 작동합니다.

var listTwo = connection.Query<ExampleDbf2>("SELECT name, value FROM Example");

그러나이 솔루션은 매우 못생긴 것입니다. 누군가가 더 나은 솔루션을 가지고있을 수도 있습니다.

수락 된 답변

항상 동적 인 것을 돌려 준 다음, 그것을 객체에 매핑하고 객체 초기화 중에 변형 작업을 수행 할 수 있습니다.

var listTwo = connection.Query<dynamic>("SELECT name, value FROM Example")
    .Select(x => new ExampleDbf 
        { 
            Value = x.value,  
            Name = System.Text.Encoding.ASCII.GetString((byte[])x.name).Trim()
        }).ToList();


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow