2011-09-30 3 views
0

DataRowCollection의 행을 반복하고 각 행의 필드를 변수에 할당합니다. 나는 항상 "입력 문자열이 올바른 형식이 아니 었습니다"라고 생각합니다. 필드가 null이거나 그렇지 않은 경우 0을 포함하도록 gapCd가 필요합니다. IsDbNull이 제대로 반환되지 않는 것 같습니다. 나는 또한 행운과 DbNull.Value 비교를 시도했습니다. 어떤 도움이라도 대단히 감사합니다.VB.NET DataRow 처리 입력 문자열이 null 값의 올바른 형식이 아닙니다.

Dim gapCd As Integer = IIf(IsDBNull(row("GAP_CD")), 0, row("GAP_CD")) 
+1

어딘가에 GAP_CD에 숫자가 아닌 값이 있다는 것이 문제가 아닙니까? –

+0

datarows는 Oracle 데이터베이스에서 리턴됩니다. 데이터베이스의 열 유형은 숫자입니다. 결과는 패키지에서 리턴되고 C 럼은 널이 될 수 있습니다. 내가 제대로 null을 확인하고 있다고 생각하지 않습니다. 나는 심지어 주사위를 할당하기 전에 CInt()를 시도했습니다. 어떤 아이디어? – Adam

+0

나는 그것이 정말로 * null 문제인지 아닌지를 먼저 알아낼 것입니다. 예를 들어 쿼리에서 null을 필터링하면 어떻게됩니까? 그래도 문제가 발생합니까? 문자열 파싱은 이상적이지 않습니다. 물론 데이터 행에서 직접 실제 값을 캐스팅 할 수 있어야합니다. –

답변

0

값 유형으로, 정수는 이미 0으로 초기화됨을 기억하십시오.

Dim gapCd As Integer 
If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD")) 

을하고 문제가 해결되지 않을 경우, 일부 로깅 시도하는 시간이다 : 그래서 이것을 시도 어떤 이유로 오늘 다시

Dim gapCd As Integer 
Try 
    If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD")) 
Catch Ex As Exception 
    SomeLoggingFunction(row("GAP_CD").ToString()) 
End Try 

톱이, 그리고 신선한 읽기에 있었다 사용자가 코드에서 "I"를 제거하여 IIf() 함수를 If() 연산자로 변경하고 단락 평가를 강제로 수행해야한다는 것을 분명히 밝히십시오.

Dim gapCd As Integer = If(IsDBNull(row("GAP_CD")), 0, row("GAP_CD")) 
관련 문제