2017-12-19 16 views
0

OracleCommand 객체에 매개 변수를 추가하려고했지만 예외가 발생했습니다 (객체는 할 수 없습니다 ...). 무슨 일을하려고하면 데이터 테이블의 열이 null 인 경우 null 값 (해당 열은 비어 있어야 함)을 데이터베이스에 삽입합니다. 는 데이터를 이런 식으로 뭔가를 포맷 걸리는 곳에서 데이터 테이블 :oracle 매개 변수를 채우는 중 오류가 발생했습니다 (객체를 DBNull에서 다른 유형으로 캐스팅 할 수 없음)

dt.Columns.Add("NAME", GetType(String)) 
dt.Columns.Add("AGE", GetType(Integer)) 

채우기

dt.Rows(0)("NAME") = DBNull.Value 
dt.Rows(0)("AGE") = DBNull.Value 

나중에 절차를 통해 데이터를 삽입 할 때 :

.... 
cmd.CommandType = CommandType.StoredProcedure 
cmd.Parameters.Add("NAME", OracleType.VarChar).Value = IIf(IsDBNull(dt.Rows(0)("CVV")), OracleClient.OracleString.Null, dt.Rows(0)("CVV")) <-- Seems to work. 
cmd.Parameters.Add("AGE"), OracleType.Number).Value = IIf(dt.Rows(0).IsNull("AGE"), OracleClient.OracleNumber.Null, CInt(dt.Rows(0)("AGE"))) <-- Error. 

어떤 제안?

답변

1

If 연산자를 사용하십시오. 이것은 Iif가 표현하지 못하는 동안 표현의 평가를 단락시킵니다. 행이 null 인 것은 사실 인 경우에도 호출되기 때문에 CINT이 실패하면 있도록 IIf function both sides of the expression are evaluated에서

cmd.CommandType = CommandType.StoredProcedure 
cmd.Parameters.Add("NAME", OracleType.VarChar).Value = If(IsDBNull(dt.Rows(0)("CVV")), 
        OracleClient.OracleString.Null, dt.Rows(0)("CVV")) 
cmd.Parameters.Add("AGE"), OracleType.Number).Value = If(dt.Rows(0).IsNull("AGE"), 
        OracleClient.OracleNumber.Null, CInt(dt.Rows(0)("AGE"))) 

은이 많이, 나는 실현하지 않았다 if operator

+0

감사의 경우되지 않습니다하여 IIf 양쪽을 평가했다. 이제 코드를 수정하겠습니다. – Popplar

+0

안녕하세요, If 문장을 사용할 수없는 것 같습니다, 그것은 vb.net 코드로 표시되고 proyect를 빌드하면 실패합니다. – Popplar

+0

죄송합니다, 지금까지 (밤 시간은 여기에)이 답변을 따르지 않았습니다. 괜찮습니까? – Steve