填充oracle参数时出错(对象无法从DBNull强制转换为其他类型)

问题描述 投票:0回答:1

我试图将参数添加到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.

有什么建议吗?

vb.net oracle11g
1个回答
1
投票

使用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不同

© www.soinside.com 2019 - 2024. All rights reserved.