2013-10-15 3 views
0

리플렉션 또는 .net을 통해 .net의 필드/속성 데이터 유형을 변경할 수 있습니까?.net의 필드 데이터 유형 변경

강력한 형식의 데이터 집합에 문제가 있으므로이 기능을 찾고 있습니다. 강력하게 형식화 된 데이터 집합은 nullable 형식의 데이터 형식을 변경하는 유연성을 제공하지 않습니다. 관련 링크 here을 참조하십시오. 따라서 런타임에 데이터 형식을 변경할 가능성이있는 경우이 문제를 해결할 수 있습니다. 또한, 추가; 이대로 MSDN Link; Microsoft 팀은이 지원을 제공하는 데별로 열의가 없습니다.

+1

열 유형을 모르는 경우 강력한 형식의 데이터 세트를 사용하지 않아야합니다. –

+0

'dynamic'을 사용할 수 있는지 없는지 모르겠지만, 사람들이해야 할 때만 사용하는 좋은 이유가 있습니다. – gunr2171

+0

@MikeChristensen 데이터 유형을 알고 있지만 유감스럽게도 데이터 테이블을 반복 할 때 VS의 데이터 집합 디자이너가 예외를 throw하는 유일한 속성을 가지고 있기 때문에 오류가 발생합니다. – shankbond

답변

1

먼저 버그가 아닙니다. 그것은 dbnull 즉 알 수없는 값과 null 즉, 아무데도 가리키는 참조 간의 차이 때문입니다. Connect와 다른 곳에서 불투명하고 도움이되지 않는 응답으로 판단 할 때 Microsoft가 설명하기에는 열세 인 것처럼 보입니다.

달성하려는 대상에 따라 여러 가지 해결책이 있습니다. 당신이 데이터 바인딩을 사용한다면, 바인딩 메커니즘은 이것을 당신을 위해 투명하게 처리한다. 코드에서 직접 데이터 셋을 치는 경우 디자이너는 Isxxxnull/setxxxnull 메서드를 사용하여 값을 확인한 후에 사용할 수 있습니다. 마지막으로 데이터 유형을 system.object로 변경할 수 있습니다. 또는 원하는 경우 다른 값을 입력 할 수있는 디자이너의 NullValue를 overtype 할 수 있습니다 (예 : int의 경우 0 또는 -1).

0

나는 알고 있습니다. 유형 정보 및 바인딩은 컴파일 유형에서 결정되므로 런타임에 변경할 수 없습니다.

타이핑을 변경하는 데 사용하는 패턴 중 하나는 adapter pattern입니다. 이것은 다른 모든 필드를 통과 한 다음 해당 필드를 새로운 유형으로 "변환"할 수 있습니다. 물론 이것은 컴파일시에도 발생합니다.

당신이하려는 일을 조금 더 확장하면 더 나은 옵션이 될 수 있습니다.

0

Dataset은 다소 오래되었으며 .net v1.0에서 나온 것입니다. Microsoft는 변경하거나 추가하지 않습니다. 일반적으로 더 나은 접근 방법은 강력한 유형의 POCO입니다. 모두 동일한 유형의 객체 (객체 유형)를 사용하는 강하게 유형화 된 여러 속성을 만들 수도 있습니다. 해당 속성에 액세스하기 전에 올바른 유형을 테스트해야합니다.

+0

응답 해 주셔서 감사합니다. 이러한 POCO 기반 모델을 만든 다음 ADO.net으로 채우는 데 많은 시간이 걸립니다.그것은 내가 데이터 집합에 갔던 이유입니다. ( – shankbond

+1

Linq에서 SQL로, EF에서 POCO 또는 POCO가 비트 생성됩니다. – andleer

+0

Mike 편집을 해주셔서 감사합니다. – andleer