如何为UniqueIdentifier类型创建空SQL参数?IIf赋值报错求解
问题产生原因
核心原因是VB.NET中IIf是普通函数,不是语法层面的条件分支运算符,不支持短路求值:
- 调用
IIf(条件, 真分支表达式, 假分支表达式)时,运行时会先把三个入参全部计算完成,才会进入IIf内部判断条件返回结果。 - 也就是说哪怕
Me.Id_Padre Is Nothing的条件成立,运行时依然会提前执行假分支的New Guid(Me.Id_Padre)逻辑,此时Me.Id_Padre是Nothing,传入Guid构造函数就会直接抛出“值不能为null”的异常。 - 你最初写的
If...Then...Else是语法级分支,天然支持短路:只有条件不成立时才会执行New Guid(Me.Id_Padre)的逻辑,因此不会触发异常。
额外注意你写的IIf版本还存在笔误:对应数据库空值的正确写法是DBNull.Value,你写成了DbNull.Value,修正时需要一并调整。
正确修正写法
不要使用IIf函数,改用VB.NET原生支持的短路三元运算符If(),它和多行If...Then...Else逻辑完全一致,只会计算符合条件的分支表达式,不会提前执行无关分支。修正后代码如下:
comandoSQL.Parameters.Add("@Id_Padre", SqlDbType.UniqueIdentifier).Value = If(Me.Id_Padre Is Nothing, DBNull.Value, New Guid(Me.Id_Padre))
内容的提问来源于stack exchange,提问作者Tom TeCi
相关产品推荐
相关产品推荐

