我试图将参数添加到OracleCommand对象但抛出异常(对象不能......)。我想要做的是,如果数据表中的列为null,则将空值插入数据库(该列必须为空)。从中获取数据的数据表的格式如下:
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.
有什么建议吗?
使用If运算符。这种短路表达的评价,而Iif没有。
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")))
在IIf function both sides of the expression are evaluated中,所以你Cint失败因为即使当行为空时调用也是如此,这与if operator不同