2011-10-18 1 views
0

좋아요. LINQ to DataSets를 사용할 때 항상 부울 유형 캐스팅 문제를 해결하는 것처럼 보입니다.하지만 새로운 결과 집합이 새로운 문제를 일으키는 것처럼 보입니다. 그래서 LINQ 사용하여 개체에 부울 속성을 채우고 다음 줄을 살펴 :LINQ to DataSets를 사용할 때 부울 유형을 캐스팅 할 때 오류가 발생합니다.

.IsActive = If(fd.IsNull("IsActive"), False, fd.Field(Of Boolean)("IsActive")) 

을 나는 또한 있었다 다음과 같은 몇 가지 성공 :

.IsActive = If((fd.Field(Of Integer?)("IsActive").HasValue), fd.Field(Of Integer)("IsActive"), False) 

이 시간도 접근 일했다. 데이터베이스의 "IsActive"형식이 '비트'이고 데이터 집합에서 반환 된 모든 레코드의 값이 '0'또는 '1'입니다. 에 관계없이 다음과 같은 오류가 나타납니다 :

"지정된 캐스트가 유효하지 않습니다. 숫자에서 전송할 때 값은 무한대보다 작은 숫자 여야합니다."

여기 내가 잘못하고있는 것을 이해하고 싶습니다. 아무도 내가 주조해야한다고 설명 할 수 있습니까? 감사!

+1

왜 데이터 테이블의 IsActive 열이 부울이 아닌가? 데이터 테이블을 어떻게 채우고 있습니까? Visual Studio에서 생성 된 형식화 된 데이터 집합은 일반적으로 데이터베이스의 비트 필드에서 부울 데이터 열을 만듭니다. –

+0

사실 SQL Server (2008)에는 '부울'유형이 없습니다. 이 유형 값에 '비트'필드를 사용합니다. 그러나 귀하의 의견에 따라 데이터베이스가 2 차적으로 검토되었고 아래에 나와있는 솔루션이 결정되었습니다. 나는 귀하의 의견을 올렸습니다. – atconway

+0

알아, 나는 데이터 세트를 언급하고 있었다. 그래서 그것은 여전히 ​​저를 궁금해하게 만듭니다 ... –

답변

0

글쎄, 원래의 문제에 대한 해결 방법을 찾은 다음 데이터베이스를 다시 볼 때 문제의 원인을 발견했습니다. 해결 방법은 값을 문자열로 캐스팅 한 다음 부울로 변환하는 것입니다. 정말 이상한 나는 '비트'필드에이 작업을 수행했지만, 그것은 일을하는 이유 : 아직 이해야 원래의 게시물에 바로, 내 원래의 코드를 보일 비트에 대한 작업을 수행하지 않았다

.IsActive = If(fd.IsNull("IsActive"), False, CBool(fd.Field(Of String)("IsActive").ToString())) 

OK

/부울 유형. 데이터베이스로 2 등을 돌린 후에 나는 똥을 발견했다. 어떤 이유로 든 우연히 그 칼럼을 'char (1)'필드로 만들었습니다. 내가 끈에 던져야 만했던 것도 당연하지. 컬럼을 '비트'로 만든 후 원래 코드가 작동했습니다.

관련 문제