You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:57:21