IDataReader에서 SQLBulkUpload에 대한 데이터 형식 변환을 수행 할 수 있습니까?

c#-4.0 mapping sqlbulkcopy

문제

한 세트의 테이블과 SQLBulkInsert에서 많은 양의 데이터를 다른 세트로 가져와야합니다 ... 불행히도 소스 테이블은 모두 varchar (최대)이며 대상은 올바른 유형이되고 싶습니다. 일부 테이블은 수백만 행에 있습니다 ... (너무 무의미한 정책상의 이유 때문에) 우리는 SSIS를 사용할 수 없습니다.

그 중 일부 "bool"값은 "Y / N", 일부 "0/1", 일부 "T / F"일부 "true / false"및 마지막으로 "on / off"로 저장됩니다.

IDataReader를 오버로드하여 유형 변환을 수행 할 수 있습니까? 컬럼 단위로해야할까요?

대안은 (아마도 가장 좋은 해결책 일 수 있습니다) 매퍼 (AutoMapper 또는 사용자 정의)를 배치하고 EF를 사용하여 하나의 오브젝트에서로드하고 다른 오브젝트로 맵핑하는 것입니다. 이것은 많은 통제를 제공하지만 모든 속성에 대한 상용구 코드가 많이 필요합니다.

수락 된 답변

결국 SQLDataReader를 보유하고 SQLDataReader 메서드를 호출하기 위해 IDataReader 메서드를 구현하는 기본 래퍼 클래스를 작성했습니다.

그런 다음 기본 클래스를 상속하고 케이스 필요에 따라 GetValue를 재정 의하여 변환해야하는 열 이름을 찾습니다.

public override object GetValue(int i)
{
  var landingColumn = GetName(i);
  string landingValue = base.GetValue(i).ToString();

  object stagingValue = null;
  switch (landingColumn)
    {
    case "D4DTE": stagingValue = landingValue.FromStringDate(); break;
    case "D4BRAR": stagingValue = landingValue.ToDecimal(); break;

    default:
        stagingValue = landingValue;
        break;
    }
  return stagingValue;
}

SQLBulkUpload 덕분에 잘 작동하고 확장 가능하며 매우 빠릅니다. 좋습니다. 따라서 유지 관리 오버 헤드가 적지 만 소스 열이 거의 변경되지 않으므로이 작업은 아무런 영향을 미치지 않습니다.



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