2010-01-26 4 views
3

왜이 오류가 발생합니까?SQL 서버에 DBNULL 값을 삽입 할 수 없습니다.

Object cannot be cast from DBNull to other types. 

난, SQL 서버 여기에 2005

내 코드가있는 수치 데이터에 대한

if (MeasurementTr.Visible == true) 
    { 
     materialIn.measurementId = Convert.ToInt64(DlMeasurement.SelectedValue.ToString()); 
    } 
    else 
    { 
     materialIn.measurementId = Convert.ToInt64(DBNull.Value); 
    } 

편집 null 값을 삽입 할 때 :

이 잘된다?

materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0; 
+0

아니요. DBNull을 Int64로 변환 할 수 없습니다. 먼저 객체 값이 DBNull이 아닌지 확인해야합니다! –

+1

그것은 'else'블록의 문제입니다. 나는'if' 블록이 괜찮다고 확신합니다 ('ToString'은 결코'DBNull.Value'를 반환 할 수 없습니다). 내가 말했듯이'DataNow' 나'SetmeasurementIdNull' 메쏘드를'DataRow'에 사용하십시오. null이 아닌 경우'null' 또는'default (Int64)'로 설정하십시오. – Aaronaught

+0

@Aaronaught 나는 else 부분을 그리워 ... 너 맞아 +1. –

답변

5

코드가 Convert.ToInt64에서 시도 할 때 DBNull.ValueInt64으로 변환 할 수 없습니다. DBNull.Value은 "알 수 없음"또는 "존재하지 않음"을 의미하므로 다른 데이터 유형으로의 논리적 변환이 없습니다.

materialIn 인스턴스가 강력한 형식 인 DataRow의 형식 인 경우 SetMeasurementIdNull 메서드가 필요하므로 사용해야합니다. Linq to SQL 또는 EF를 사용하는 경우 DBNull을 전혀 처리 할 필요가 없으며 대신 materialIn.measurementId = null으로 작성하면됩니다.

1

Object cannot be cast from DBNull to other types.

그래서 당신이해야 할 일을 DBNull에 대한 값을 확인하는 것입니다 때문입니다.

materialIn.measurementId = DlMeasurement.SelectedValue == DBNull.Value? 0 : Convert.ToInt64 (DlMeasurement.SelectedValue.ToString());

+0

@Mendy 연산자 '==' 'string'및 'System.DBNull'형식의 피연산자에 적용 할 수 없습니다 – bala3569

+0

SelectedValue 개체가 아닌가요? –

+0

정답으로 내 질문을 편집 할 수 있습니까 – bala3569

0

DBNull이 Int64로 변환되지 않습니다. nullable int를 사용하고 값에 null을 저장하거나 속성에 저장할 수있는 0과 같은 null을 나타내는 값을 사용합니다.

관련 문제