2011-02-03 2 views
-1

뒤에 문자열로 캐스팅하지만 난 단 한 줄의 코드로 문제를 추적 : 나는 Oracle 데이터베이스를 사용하고지능은 inadverantly이 원래 크리스탈 리포트에 문제가 있었다 내 다시

foreach (DataRow dr in ds.Tables["CurrentScheduleFields"].Rows) 
    if (dr["MY_FIELD"].ToString() == string.Empty) 
     dr["MY_FIELD"] = 0; 

. 필드는 실제로 숫자 (2)입니다. 우리는이 경우 똑 바른 ADO.NET과 Nullable 타입을 사용하지 않습니다. 하나의 경우 해당 필드의 값이 int이고 위의 코드 줄이 좋습니다. 다른 경우, 필드의 값은 DBNull.Value이고 위 또는 일부는 0을 "0"(문자열)으로 변환합니다.

dr하지

사람이 왜 알고 있나요 (ds.Tables [ "CurrentScheduleFields"]. 행에서의 DataRow의 DR)를`DataReader를 foreach 문 입니까?

내 브라우저에서 주석 달기를 클릭하지 않으므로 여기에 자료를 추가하고 있습니다. 왜 (dr [ "MY_FIELD"] == DBNull.Value) dr [ "MY_FIELD"] = 0; 디버거가 그 비트를 치고 0이 아닌 값이 "0"인 문자열로 변환됩니다. 첫 번째 응답이이 문제를 처리 할 것이라고 생각합니다. "문제는 첫 번째"MY_FIELD "가 null 일 수 있습니다. ADO.NET은 해당 열의 유형은 문자열입니다. " 이제는 DBNull이있는 문자열입니다. 값이 있습니까?

내 브라우저가 잠겨 있습니다. 이것을 편집하는 것 이외에는 아무 것도 클릭 할 수 없지만 : 답변 : 정수가 아닌이 값에 대한 문자열을 처리하는 수식을 변경하여 Crystal 측에서 처리하십시오. 그것은 작동합니다!

+0

'dr'의 유형은 무엇입니까? –

+1

'dr '은'DataReader'의 일종입니다. –

+0

@Sam : 오라클이 변환 자체를 수행하지 않는다면이 코드가 필드를 "0"으로 설정하는 것은 거의 불가능하다고 생각합니다. –

답변

1

DataTable을 사용할 때 세트의 첫 번째 행에있는 해당 열의 값을 기반으로 열의 유형을 "추측"하려고 시도하는 경우가 있습니다. 따라서 수 있습니다 첫 번째 "MY_FIELD"null, 해당 열의 형식을 문자열 인 ADO.NET 수 있습니다.

DataTable을로드하기 전에 스키마를 설정해야 할 수 있습니다.

관련 문제